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

Msbuild 在开发时使用项目引用而不是nuget包?,msbuild,nuget,project,Msbuild,Nuget,Project,我们有一个项目a(csproj,netstandard2.0),我们想作为一个nuget包发布 我们希望在项目B中使用(csproj、.netframework4.7.2)来加速构建服务器上的构建。因为我们不需要在构建项目B之前构建项目A 然而,为了简化开发,我希望有一个包含两个项目的解决方案,这样我可以编辑项目a的源代码并(重新)编译,以便项目B使用项目a的最新版本(,而不需要打包项目a的新nupkg(如果可能的话,在我们的nuget包源服务器上发布它))。(仍在构建服务器上使用nuget时)

我们有一个项目a(csproj,netstandard2.0),我们想作为一个nuget包发布

我们希望在项目B中使用(csproj、.netframework4.7.2)来加速构建服务器上的构建。因为我们不需要在构建项目B之前构建项目A

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

这个怎么归档

我搜索了web和stackoverflow,但找不到一种方法来实现这一点


正如@Zivkan所说,这是一件有点奇怪的事情,原因有很多,但如果你想尝试一下,我认为以下方法可以奏效:

您可以在项目中使用条件语句,以便在本地生成时使用项目引用,但在生成计算机上生成时,您可以在命令行中指定一个属性以使用包引用。
e、 g


然后,在生成服务器上生成时,只需确保将
-p:IsBuildServer=true
指定为msbuild/dotnet build的命令行参数


包引用中的“*”仅表示获取最新可用的稳定包,但可能不是您想要的,具体取决于您希望生成服务器生成的内容。

如果您可以使用项目引用,则表明两个项目位于同一repo中。您的CI不生成ProjectA吗?如何在ProjectB中将其作为包参考使其更快?您是否有只构建回购协议子集的复杂CI规则?它是否需要位于同一回购协议中?是的,CI生成ProjectA,但仅在进行更改时生成!从而加快了ProjectB的构建,因为ProjectA不需要一直构建。我计划为ProjectA创建一个单独的回购协议(可以作为ProjectB中的子回购协议添加)。Microsoft在asp.net核心存储库中也这样做:。但是我也想知道这个问题的答案。@Toeben抱歉,显然带有自定义属性的条件不能直接用于项目/包引用或其包含项组,我已更新了答案,改为使用Choose-When结构。让我知道它是否适用于您。我让/让它使用Directory.Build.props文件中定义的属性,并在控制台上使用msbuild。不幸的是,Visual studio 2017缓存了文件,但在文件发生部分更改时没有更新缓存。我认为这是一个已知的Visual studio错误:如果我理解正确,请将目标指定为干净;在构建服务器上运行并使用命令行属性而不是directory.Build.props时,Build而不仅仅是Build应该可以工作(与上面的答案结合使用)。
<Choose>
  <When Condition="'$(IsBuildServer)' == 'true'">
    <ItemGroup>
      <PackageReference Include="A" Version="*" />
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <ProjectReference Include="relativepath\A.csproj" />
    </ItemGroup>
  </Otherwise>
</Choose>