簡體   English   中英

使用本地項目引用覆蓋 nuget 包引用

[英]Override a nuget package reference with a local project reference

我想迭代一個 nuget 包,而不是不斷地將包推送到 nuget 提要。

我想知道是否可以通過 csproj 文件中的目標或道具文件有條件地添加項目引用而不是 nuget 包引用,這將允許我在本地調試我的 nuget 包。

在我的 csproj 中,我將擁有:

<Reference Include="A">
    if(Exists(localOverrides.props) {
        <HintPath>localOverrides.A.HintPath</HintPath>
    } else {
        <HintPath>..\packages\A.dll</HintPath>
    }
</Reference>

並且 localOverrides.props 將是我的 .gitignore 中列出的文件,開發人員可以添加如下行:

A -> C:\Repos\A\bin\A.dll

我走錯路了嗎? 當然,必須有一種更可持續的方式來快速迭代和調試 nuget 包,然后在每次更改時創建預發布包

我一直調試 Nuget 包的方式是,一旦您通過 Nuget 將該包添加到您的解決方案中,然后您對 Nuget DLL 進行更改,並將它們復制到使用 Nuget 包的項目的包文件夾中的正確文件夾中。

您所要做的就是在調試模式下編譯 Nuget 項目解決方案的解決方案,然后將它們復制/粘貼到使用項目的包文件夾中。 您可以通過編寫批處理腳本並將其作為構建后事件添加到剛剛將 DLL 復制到您的正確文件夾中的 Nuget 項目中來簡化此操作。

如果您只想調試 NuGet 包,我建議您使用“dotpeek 調試服務器”選項。 這樣你就不需要對引用做任何事情,只需調試包或任何你想要的。 https://confluence.jetbrains.com/plugins/servlet/mobile#content/view/53336814

聽起來您希望在與 NuGet 打包程序集項目相同的解決方案中擁有一個測試項目(單元或集成)。 然后,您可以獨立於 NuGet 包的任何使用者證明它的正確性。 良好的測試還有助於確保您在將來更新軟件包時不會無意中破壞任何東西。

有一種更簡單的方法,您可以同時使用這兩種方法:開發期間的項目引用(更快)和生產期間的包引用。

在您的.csproj項目文件中:

<ItemGroup Condition="'$(Configuration)'=='Debug'">
  <ProjectReference Include="../../../Library1/Library1.csproj" />
  <ProjectReference Include="../../../Library2/Library2.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'!='Debug'">
  <PackageReference Include="Library1" Version="1.0.0" />
  <PackageReference Include="Library2" Version="1.0.0" />
</ItemGroup>

在開發中:項目以調試模式編譯,因此將使用項目引用。

在生產中(CI 服務器,docker 容器):項目以發布模式編譯,因此將使用包引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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