Hello,
There is a bug in the way circular dependencies are computed. A fix for this is available [here](http://nuget.codeplex.com/SourceControl/network/forks/xaviernoelle/NuGet/contribution/3802) but I don't have the time to write tests as requested.
You will find attached a zip file containing three projects : Father, Son and User :
- The Father project depends on the Son project
- The User project depends on both the Father and Son projects
You just need to unzip the archive, modifiy the build.bat to replace "YOUR_DOTNET_VERSION" by...your .Net version, run it and see for yourself.
The catch here is that "Son" depends (on purpose) on an "Unknown" package. Inverting "Son" and "Father" in the packages.config file of the User project "solves" the problem.
The inner problem is in fact that when the circular dependency checker stumbles upon the "Unknown" package dependency (for "Son"), it returns from the method without marking the "Son" package as visited. Then, when dependencies are checked for the "Father" project, the "Son" package is still in a "processing" state (for no reason), which throws a circular dependency exception.
Thanks in advance !
Comments: Here is the pull request implementing this approach: http://nuget.codeplex.com/SourceControl/network/forks/broggeri/nuget/contribution/4012
There is a bug in the way circular dependencies are computed. A fix for this is available [here](http://nuget.codeplex.com/SourceControl/network/forks/xaviernoelle/NuGet/contribution/3802) but I don't have the time to write tests as requested.
You will find attached a zip file containing three projects : Father, Son and User :
- The Father project depends on the Son project
- The User project depends on both the Father and Son projects
You just need to unzip the archive, modifiy the build.bat to replace "YOUR_DOTNET_VERSION" by...your .Net version, run it and see for yourself.
The catch here is that "Son" depends (on purpose) on an "Unknown" package. Inverting "Son" and "Father" in the packages.config file of the User project "solves" the problem.
The inner problem is in fact that when the circular dependency checker stumbles upon the "Unknown" package dependency (for "Son"), it returns from the method without marking the "Son" package as visited. Then, when dependencies are checked for the "Father" project, the "Son" package is still in a "processing" state (for no reason), which throws a circular dependency exception.
Thanks in advance !
Comments: Here is the pull request implementing this approach: http://nuget.codeplex.com/SourceControl/network/forks/broggeri/nuget/contribution/4012