开发时使用项目引用而不是nuget包?

问题描述 投票:0回答:2

我们有一个项目 A(csproj、netstandard2.0),我们希望将其作为 nuget 包发布。

我们希望在项目 B 中使用此包,使用 (csproj,.net Framework 4.7.2)来加快构建服务器上的构建速度。因为我们不需要在构建项目 B 之前构建项目 A。

为了简化开发,我希望有一个包含这两个项目的解决方案,以便我可以编辑项目 A 的源代码并(重新)编译,以便项目 B 使用项目 A 的最新版本(无需需要)打包项目 A 的新 nupkg(如果可能的话,将其发布到我们的 nuget 包源服务器上))。 (同时仍在我们的构建服务器上使用 nuget)

如何实现这一点?

我搜索了网络和 stackoverflow,但找不到它的工作原理。

谢谢

msbuild nuget project
2个回答
1
投票

正如 @Zivkan 所说,由于多种原因,这有点奇怪,但如果你想尝试一下,我认为以下方法会起作用:

您可以在项目中使用条件语句,以便在本地构建时使用项目引用,但在构建机器上构建时,您可以在命令行中指定一个属性来使用包引用。
例如

<Choose>
  <When Condition="'$(IsBuildServer)' == 'true'">
    <ItemGroup>
      <PackageReference Include="A" Version="*" />
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <ProjectReference Include="relativepath\A.csproj" />
    </ItemGroup>
  </Otherwise>
</Choose>

然后在构建服务器上构建时,只需确保指定

-p:IsBuildServer=true
作为 msbuild / dotnet build 的命令行参数。

包参考中的“*”仅表示采用最新的可用稳定包,但可能并不完全是您想要的,具体取决于您希望构建服务器构建的内容。


0
投票

我知道这个问题有点老了,但我留下这个答案是为了帮助未来的同行。

利用 dotnet pack 命令,使用它时您可以添加对 csproj 的直接引用。您唯一需要确定的是使用属性

IsPackable
并且不要在构建过程中生成包。之后, pack 命令会将直接引用更改为包引用。有关更多信息,请检查 dotnet 运行时存储库以了解其使用方式。

可以在此处找到 pack 命令的文档:https://learn.microsoft.com/pt-br/dotnet/core/tools/dotnet-pack

© www.soinside.com 2019 - 2024. All rights reserved.