将.NET Core工具链用于客户项目

时间:2019-02-14 13:28:30

标签: c# .net .net-core msbuild csproj

任务: 我需要管理客户项目。我们有一个私有的NuGET存储库,该存储库托管引导程序(以Company.Core.Cmd为目标的引导程序(netcoreapp2.0)和一些模块(即以Company.Component.A为目标的Company.Component.Bnetstandard2.0)。每个客户项目都包含引导程序和一些模块,并添加了一些静态文件(如配置)。

问题: 以下解决方案是解决此问题的最佳方法,还是有一种更好的方式编写csproj,即为Company.Core.Cmd生成运行时配置。是否缺少某些properties或使用Microsoft.NET.Sdk甚至错误的起点?也许直接使用MSBuild而不使用SDK或其他SDK?对我来说,此解决方案似乎是一种解决方法,因此我对使用它并不真正有信心。

背景: 当前,我们在dotnet publish上使用Company.Core.Cmd来获取包含app.deps.jsonapp.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.jsonCompany.Core.Cmd文件。将已生成的文件重命名为Company.Core.Cmd并删除此项目的dll(没有代码,因此也没有入口点)可以正常工作。可以通过构建后任务将其自动化,然后放入Sdk中以简化用法。

0 个答案:

没有答案