我有一个项目,其中包含来自git的2个子模块。这两个项目都有" nuget包恢复"启用,父项目也是。 两个包含的子模块中的包文件夹未签入,在签出的项目中不存在。 构建父项目时,Nuget尝试将子文件夹中的包还原到错误的包文件夹中!
"C:\Dev\git\oasisdb\odb_oasis_repository\ODB_OASIS_Repository\.nuget\NuGet.exe" install "C:\Dev\git\oasisdb\odb_oasis_repository\odb_oasis_rvm\ODB_OASIS_RVM_EF\ODB_OASIS_RVM_EF\packages.config" -source "" -NonInteractive -RequireConsent -solutionDir "C:\Dev\git\oasisdb\odb_oasis_repository\ODB_OASIS_Repository\ "
为什么nuget不能在子模块的解决方案目录中恢复?
由于
答案 0 :(得分:16)
Nuget正在打开的解决方案目录中恢复软件包。
您可以编辑子模块项目的.csproj并修改包dll引用:
<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>
到:
<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>
希望这有帮助!
答案 1 :(得分:9)
找到答案: 对于任何被捕者:
http://www.xavierdecoster.com/how-to-nuget-package-restore-when-sharing-projects-between-solutions
和
答案 2 :(得分:2)
您可以使用符号链接:
在nuget将所有软件包下载到解决方案的packages
目录后,在子模块的根目录(名称packages
中创建符号链接并链接到解决方案级别packages
目录)。
简而言之 - 在您的启动项目中添加Pre-Build事件,该事件在您的解决方案packages
目录与您的所有子模块packages
目录之间创建符号链接:
这是批次:
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%
答案 3 :(得分:0)
如果您使用的是VS2015 Update 1或更高版本,则可以convert your project to use project.json
to fix this。
简而言之:
Uninstall-Package <package name> -Force -RemoveDependencies
。在执行此操作之前,您可能希望将packages.config
复制粘贴到记事本中。packages.config
,保存项目,卸载.props
文件<Reference>
元素.targets
个文件 - 通常以:<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
使用以下内容添加project.json
{
"dependencies": {
},
"frameworks": {
".NETFramework,Version=v4.6.1": {}
},
"runtimes": {
"win": {}
}
}
最后再次添加您的包,可以在dependencies
下使用Install-Package
,也可以使用VS中的nuget UI。
我还必须从我的项目中删除任何Microsoft.Bcl.*
个包,因为他们明确要查找packages.config
个文件。
编辑:这个(删除Microsoft.Bcl.*
包会给你一个编译时错误,即使项目构建正常,因为添加的.targets
文件Microsoft.Bcl.Build
仍会查找packages.config
。
要取消此操作,请编辑项目文件并添加:
<SkipValidatePackageReferences>true</SkipValidatePackageReferences>
这需要转到没有设置<PropertyGroup>
属性的第一个Condition
。如果没有,只需在顶部添加另一个,例如:
<PropertyGroup>
<SkipValidatePackageReferences>true</SkipValidatePackageReferences>
</PropertyGroup>