i have a project where i include 2 submodules from git. Both projects have \"nuget package restore\" enabled, the parent project too. The package folder in the two included
Found the answers: For anyone interrested:
http://www.xavierdecoster.com/how-to-nuget-package-restore-when-sharing-projects-between-solutions
and
NuGet not getting missing packages
you can use symbolic link:
After nuget downloads all packages to solution's packages
directory, create symbolic link in submodule's root directory (names packages
and link to the solution level packages
directory).
In short - in your startup project add Pre-Build event that creates symbolic link between your solution packages
directory to all your submodules packages
directory:
This is the batch:
SET sourceDir=$(SolutionDir)packages
SET destDir=$(SolutionDir)..\..\submodules\saturn72\src\packages
if not exist %sourceDir% mkdir %sourceDir%
if not exist %destDir% mklink /j %destDir% %sourceDir%
Full explanation and source code: SolutionWithGitSubmodulesAndNuget
Nuget is restoring the package in the opened solution directory.
You can edit the .csproj of the submodule project and modify package dll references from :
<ItemGroup>
<Reference Include="Microsoft.Rest.ClientRuntime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Rest.ClientRuntime.2.1.0\lib\net45\Microsoft.Rest.ClientRuntime.dll</HintPath>
<Private>True</Private>
</Reference>
to :
<ItemGroup>
<Reference Include="Microsoft.Rest.ClientRuntime, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>$(SolutionDir)\packages\Microsoft.Rest.ClientRuntime.2.1.0\lib\net45\Microsoft.Rest.ClientRuntime.dll</HintPath>
<Private>True</Private>
</Reference>
Hope this help!
If you're using VS2015 Update 1 or later, you can convert your project to use project.json to fix this.
In short:
Uninstall-Package <package name> -Force -RemoveDependencies
for all your packages. You may wanna copy-paste your packages.config
in notepad before you do this.packages.config
from the project, save the project, unload.props
files at the top related to nuget<Reference>
elements that reference a package.targets
files at the bottom that reference nuget - usually starts with: <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
Add project.json
with:
{
"dependencies": {
},
"frameworks": {
".NETFramework,Version=v4.6.1": {}
},
"runtimes": {
"win": {}
}
}
Finally add your packages again, either by hand under dependencies
or using Install-Package
or with the nuget UI in VS.
I've also had to remove any Microsoft.Bcl.*
packages from my projects because they explicitly look for a packages.config
file.
EDIT: this (removing the Microsoft.Bcl.*
packages will give you a compile-time error, even though the project will build fine, because the .targets
file Microsoft.Bcl.Build
adds will still look for packages.config
.
To suppress this, edit your project file and add:
<SkipValidatePackageReferences>true</SkipValidatePackageReferences>
This needs to go to the first <PropertyGroup>
that doesn't have a Condition
attribute set. If there isn't one, just add another at the top, like:
<PropertyGroup>
<SkipValidatePackageReferences>true</SkipValidatePackageReferences>
</PropertyGroup>