[英]NuGet packages project dependencies as nuget dependencies
我有3個類庫項目(所有.NET Standard 2.0),它們都在同一解決方案中。 我想將它們打包到單個nuget中,並在其他存儲庫中使用代碼。
但是,當我將它們打包到NuGet軟件包中時,其中兩個作為對nuget的依賴關系添加到第三個,而不是直接引用為dll。
這是我的設置示例。
3個項目-A .csproj, B .csproj, C .csproj(所有類庫,所有.NET Standard 2.0)
將A設置為啟動項目,並引用B和C
B引用了C
C沒有引用其他兩個(僅引用2個第3方nuget)
當我將解決方案打包到nuget軟件包中時,nuspec文件具有一個<dependencies>
組,該組具有我項目中的所有nuget引用( 正確 )以及版本1.0.0( 不正確 )的項目B和C的 2個依賴關系。
我不確定是什么原因導致了nuget的行為(我想像是設計使然),但是我無法解決這個問題。
我想要的是將項目B和C打包為DLL打包到項目A,而不是單獨打包。
我不確定是什么原因導致了nuget的行為(我想像是設計使然),但是我無法解決這個問題。
是的,這是設計使然。 當我們打包.net core
/ .NET Standard
, PrivateAssets
元數據標記控制依賴項資產是否流向父項目。 如果該值設置為All
,則此依賴項資產將不會流到父項目。 換句話說,項目B和C將不會作為依賴項添加到包中。
選中控制依賴項資產以獲取更多信息。
我想要的是將項目B和C打包為DLL打包到項目A,而不是單獨打包。
就像我在第一個問題中所說的那樣,我們可以使用PrivateAssets
元數據標簽來控制依賴項資產是否流向父項目,但是PrivateAssets
元數據標簽不會將項目B和C打包為項目A DLL。
如果您希望將項目B和C打包為DLL而不是單獨的軟件包打包到項目A,則需要使用.nuspec
文件來手動包括它們。
.nuspec
像:
<?xml version="1.0"?>
<package >
<metadata>
<id>TestDemo</id>
<version>1.0.0</version>
<authors>Tester</authors>
<owners>Tester</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>TestDemo</description>
<releaseNotes>Summary of changes made in this release of the package. </releaseNotes>
<copyright>Copyright 2017</copyright>
<tags>Tag1 Tag2</tags>
</metadata>
<files>
<file src="bin\debug\projectA.dll" target="lib\.netstand2.0" />
<file src="<Path>\projectB.dll" target="lib\.netstand2.0" />
<file src="<Path>\projectC.dll" target="lib\.netstand2.0" />
</files>
</package>
檢查此線程以獲取更多詳細信息。
您必須手動/或通過一些預/后構建命令/腳本來更新.nuspec
依賴項的版本。 如果您需要對許多項目執行此操作,那么我建議您編寫一個腳本並在構建前/構建后事件上運行。
.nuspec
無法檢測依賴項本身的版本。
看來您想生成B和C的DLL,然后將它們復制到A的nuspec文件中引用的A的資源文件夾中。 也就是說,您只是包裝A,而恰好包括B和C的DLL,因此B和C的構建以及向A添加那里的DLL應該在包裝A 之前分別進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.