[英]Nuget Package restore with git submodule
我有一個項目,其中包括來自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不能在子模塊的解決方案目錄中恢復?
謝謝
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>
希望這有幫助!
您可以使用符號鏈接:在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%
完整的解釋和源代碼: SolutionWithGitSubmodulesAndNuget
如果您使用的是VS2015 Update 1或更高版本,則可以將項目轉換為使用project.json
來解決此問題 。
簡而言之:
Uninstall-Package <package name> -Force -RemoveDependencies
。 在執行此操作之前,您可能希望將packages.config
復制粘貼到記事本中。 packages.config
,保存項目,卸載 .props
文件都與nuget相關 <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.*
包將給你一個編譯時錯誤,即使項目將構建正常,因為Microsoft.Bcl.Build
添加的.targets
文件仍將查找packages.config
。
要禁止此操作,請編輯項目文件並添加:
<SkipValidatePackageReferences>true</SkipValidatePackageReferences>
這需要轉到沒有設置Condition
屬性的第一個<PropertyGroup>
。 如果沒有,只需在頂部添加另一個,如:
<PropertyGroup>
<SkipValidatePackageReferences>true</SkipValidatePackageReferences>
</PropertyGroup>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.