不处于发布模式时对本地的包引用

Package reference to local when not in release mode

我有一个解决方案 W92.Externals,里面有 3 个项目:

每个项目都部署到 NuGet 并被许多其他 microservices/projects 通过 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.When 我在本地工作 - 从 W92.Externals.Domain 中获取依赖项作为项目依赖项,如下所示:

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

2.When 更改已部署(在发布模式下)应该从 nuget 中获取包。如上所示:

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

有什么办法可以实现吗?

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

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

您应该保留正常 ItemGroup 以定义对正常 third-party 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 加载释放模式的设置。