不在发布模式下时对本地的程序包引用

时间:2019-07-16 14:05:05

标签: visual-studio-2017 nuget nuget-package

我有一个解决方案W92.Externals,其中包含3个项目:

  • W92.Externals.Domain(网络标准2.0)
  • W92.Externals.FunctionApps(网络标准2.0)
  • W92.Externals.FunctionApps.Servicebus(网络标准2.0)

每个项目都已部署到NuGet,并通过NuGet被许多其他微服务/项目使用。

现在在解决方案W92.Externals中,我决定使用内部依赖项,这意味着W92.Externals.FunctionApps将具有对W92.Externals.Domain的依赖关系。

W92.Externals.FunctionApp.csproj看起来像这样:

<PackageReference Include="W92.Externals.Domain" Version="2019.7.16.139486" />
<PackageReference Include="Microsoft.Azure.ServiceBus" Version="3.3.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="3.0.3" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.26" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />

现在我的目标是:

1。当我在本地工作时-将W92.Externals.Domain的依赖项作为项目依赖项,如下所示:

<ItemGroup>
    <ProjectReference Include="..\..\..\Common\src\W92.Externals\W92.Externals.Domain.csproj" />
</ItemGroup>

2。部署更改(在发布模式下)时,应从nuget ..包中取出软件包,如上所示:

<PackageReference Include="W92.Externals.Domain" Version="2019.7.16.139486" />

是否有可能实现?

在根文件夹中,我有 nuget.config 文件。也许我可以使用它来解决问题吗?

我在VS 2017中有一个项目。版本15.9.12 这些项目位于“ Microsoft.NET.Sdk”中。

1 个答案:

答案 0 :(得分:1)

您应保留常规的ItemGroup来定义对常规第三方nuget程序包的程序包引用:

  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.ServiceBus" Version="3.3.0" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="3.0.3" />
    <PackageReference Include="Microsoft.Extensions.DependencyModel" Version="2.1.0" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.26" />
    <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
  </ItemGroup>

然后使用xx.csproj文件中的msbuild conditions来管理对您自己的W92.Externals.Domain的依赖性:

  <ItemGroup Condition="'$(Configuration)' == 'Debug'">
    <ProjectReference Include="..\..\..\Common\src\W92.Externals\W92.Externals.Domain.csproj" />
  </ItemGroup>

  <ItemGroup Condition="'$(Configuration)' == 'Release'">
    <PackageReference Include="W92.Externals.Domain" Version="2019.7.16.139486" />
  </ItemGroup>

通过这种方式,建议您每次switch between the Debug and Release mode之后重新加载项目,以在解决方案资源管理器中刷新UI并避免搞乱设置。

启动VS打开此解决方案时,它将读取项目文件的内容并为您加载相应的参考。

例如,如果默认情况下在debug mode中打开解决方案,则它将使用项目引用而不是程序包引用。这就是您想要的,但是当您切换到release mode时,您需要unload the project and reload it in solution explorer才能加载发布模式的设置。