簡體   English   中英

NuGet將項目依賴項打包為nuget依賴項

[英]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設置為啟動項目,並引用BC

B引用了C

C沒有引用其他兩個(僅引用2個第3方nuget)

當我將解決方案打包到nuget軟件包中時,nuspec文件具有一個<dependencies>組,該組具有我項目中的所有nuget引用( 正確 )以及版本1.0.0( 不正確 )的項目BC的 2個依賴關系。

我不確定是什么原因導致了nuget的行為(我想像是設計使然),但是我無法解決這個問題。

我想要的是將項目BC打包為DLL打包到項目A,而不是單獨打包。

我不確定是什么原因導致了nuget的行為(我想像是設計使然),但是我無法解決這個問題。

是的,這是設計使然。 當我們打包.net core / .NET StandardPrivateAssets元數據標記控制依賴項資產是否流向父項目。 如果該值設置為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM