任务:
我需要管理客户项目。我们有一个私有的NuGET存储库,该存储库托管引导程序(以Company.Core.Cmd
为目标的引导程序(netcoreapp2.0
)和一些模块(即以Company.Component.A
为目标的Company.Component.B
和netstandard2.0
)。每个客户项目都包含引导程序和一些模块,并添加了一些静态文件(如配置)。
问题:
以下解决方案是解决此问题的最佳方法,还是有一种更好的方式编写csproj
,即为Company.Core.Cmd
生成运行时配置。是否缺少某些properties
或使用Microsoft.NET.Sdk
甚至错误的起点?也许直接使用MSBuild而不使用SDK或其他SDK?对我来说,此解决方案似乎是一种解决方法,因此我对使用它并不真正有信心。
背景:
当前,我们在dotnet publish
上使用Company.Core.Cmd
来获取包含app.deps.json
和app.runtimeconfig.json
的可运行环境。最重要的是,我们添加了所需模块的dotnet publish
的结果,如果需要不同版本的依赖项,则会导致问题。
我们尝试过的一种解决方法是克隆Company.Core.Cmd.csproj
并将所需的模块添加为PackageReference
并在此自定义dotnet publish
上执行csproj
。这样可以解决问题,但是需要克隆我们不喜欢的Company.Core.Cmd
的代码。
可能的解决方案:
今天,我想到了利用工具链来创建这样一个单独的csproj
文件并在其上使用dotnet publish
的想法:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>0.0.1</Version>
<TargetFramework>netcoreapp2.0</TargetFramework>
<DebugType>None</DebugType>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Company.Core.Cmd" Version="0.1.0" />
<PackageReference Include="Company.Component.A" Version="0.1.0" />
<PackageReference Include="Company.Component.B" Version="0.2.0" />
</ItemGroup>
<ItemGroup>
<Content Include="config.bin" />
</ItemGroup>
</Project>
这正在某种程度上进行扩展,解决所有依赖关系并创建可运行的解决方案。但是将为此项目而不是.deps.json
创建.runtimeconfig.json
和Company.Core.Cmd
文件。将已生成的文件重命名为Company.Core.Cmd
并删除此项目的dll
(没有代码,因此也没有入口点)可以正常工作。可以通过构建后任务将其自动化,然后放入Sdk
中以简化用法。