不处于发布模式时对本地的包引用
Package reference to local when not in release mode
我有一个解决方案 W92.Externals
,里面有 3 个项目:
W92.Externals.Domain
(网络标准 2.0)
W92.Externals.FunctionApps
(网络标准 2.0)
W92.Externals.FunctionApps.Servicebus
(网络标准 2.0)
每个项目都部署到 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
加载释放模式的设置。
我有一个解决方案 W92.Externals
,里面有 3 个项目:
W92.Externals.Domain
(网络标准 2.0)W92.Externals.FunctionApps
(网络标准 2.0)W92.Externals.FunctionApps.Servicebus
(网络标准 2.0)
每个项目都部署到 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
加载释放模式的设置。