gpt4 book ai didi

.net - VS 2017 中构建的包不打包引用的程序集

转载 作者:行者123 更新时间:2023-12-05 07:32:15 46 4
gpt4 key购买 nike

借助 VS 2017 中 .NET Core/Standard 项目中的“打包”选项卡,可以轻松地自动打包项目。但是,可以理解的是,解决方案中对其他项目的引用未打包。使用此流程打包依赖项的唯一方法是将每个依赖项发送到 NuGet,从 NuGet 安装它,删除解决方案依赖项(引用 NuGet,而不是程序集)。

我的问题:在一个解决方案中有 2 个 .NET Standard 项目 A 和 B,其中 B 依赖于 A,获得两个 NuGet 的最简单方法是什么 - A.nupkg 和 B.nupkg,其中 B.nupkg 包含对 A.nupkg 的引用?

编辑:让 PackageReference 和 ProjectReference 都具有相同名称的 dll 是一个陷阱,但 VS2017 似乎只打包作为 PackageReference 添加的 dll。我想使用本地文件构建解决方案,但使用 PackageReference 将 B.nupkg 打包到 A.nupkg。

EDIT2 到目前为止,我将引用从项目切换到 NuGet、构建和打包,然后切换回来。现在我认为这是浪费时间,我正在键入调用 dotnet pack 的 PS 脚本,但也许有更简单的方法,利用内置的“包”选项卡?

最佳答案

解决方案是添加新配置,如“Pack”,而不是在 *.projs 中将所有需要的 ProjectReferences 替换为 PackageReferences。

首先:解决方案 -> RMB -> ConfigurationManager -> 新配置(从下拉列表中选择)

enter image description here

它将向 .sln 文件添加新的构建配置,并向所有 *.proj 文件添加适当的条目。

在每个你想为其构建包的项目中,添加如下互斥条件:

  <ItemGroup>
<PackageReference Include="Stocks.Data.Model" Version="2.0.0" Condition="'$(Configuration)' == 'Pack'" />
<PackageReference Remove="Stocks.Data.Model" Version="2.0.0" Condition="'$(Configuration)' != 'Pack'" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Stocks.Data.Model\Stocks.Data.Model.csproj" Condition="'$(Configuration)' != 'Pack'" />
<ProjectReference Remove="..\Stocks.Data.Model\Stocks.Data.Model.csproj" Condition="'$(Configuration)' == 'Pack'" />
</ItemGroup>

如您所见,这是同一个 dll,一个来自 NuGet,一个来自本地解决方案。通过这种方式,您可以通过一次下拉更改来构建具有适当依赖关系的所有 NuGet。这是最干净的解决方案,利用内置机制。也不要忘记启用“在构建时生成 NuGet 包”以使其正常工作。

请注意,当前 VS 会暂时用黄色警告图标警告有关在依赖项中添加了相同名称的 dll,但这是正确的,因为每个配置有一个 dll - 重新加载解决方案可以解决此问题。

引用资料:

关于.net - VS 2017 中构建的包不打包引用的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51338446/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com