【问题标题】:Multiple binaries from a single DotNet Core project configuration file来自单个 DotNet Core 项目配置文件的多个二进制文件
【发布时间】:2019-10-27 16:07:28
【问题描述】:

我有一堆用于测试/展示网络库的 CLI 实用程序的代码。该库被编译成一个程序集 - DotNet Core DLL。

我有几个 CLI 示例展示了如何使用该库,例如,一个搜索使用分页功能,另一个返回所有内容等。基本上,每个都是一个简短的独立 CLI 程序。

我有针对 dotnet 核心的 CS 源文件和 csproj 文件。下面是配置:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="mylib>
      <HintPath>../../bin/Debug/netstandard2.0/publish/mylib.dll</HintPath>
    </Reference>
  </ItemGroup>
</Project>

我希望每个源文件都有一个可执行文件,例如PGSample.cs 将被编译成 PGSample.exe 等。我将如何实现这一目标?

【问题讨论】:

    标签: c# .net-core csproj


    【解决方案1】:

    恐怕每个 csproj 只能有一个输出,但有一些技巧可以更轻松地管理多个项目。

    您可以将常用的构建设置放入项目根文件夹中名为Directory.build.props 的文件中,例如:

    <Project>
        <PropertyGroup>
            <Authors>Your name here</Authors>
            <Company>Your company</Company>
            <Product>The project name</Product>
            <Version>1.6.18</Version>
            <PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
            <!-- e.g. bin/Release_net48/foo_cli/ -->
            <OutputPath>$(SolutionDir)bin\$(Configuration)_$(TargetFramework)\$(MSBuildProjectName)</OutputPath>
            <TargetFrameworks>net48</TargetFrameworks>
        </PropertyGroup>
    </Project>
    

    然后,为每个输出添加一个子目录和最小的csproj 文件,例如

    libfoo/libfoo.csproj:&lt;Project Sdk="Microsoft.NET.Sdk" /&gt;(真的,就是这样!)

    foo_cli/foo_cli.csproj:

    <?xml version="1.0" encoding="utf-8"?>
    <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup><OutputType>Exe</OutputType></PropertyGroup>
        <ItemGroup><ProjectReference Include="..\libfoo\libfoo.csproj" /></ItemGroup>
    </Project>
    

    如果你只有一个库和很多可执行文件,你甚至可以将你的可执行文件设置添加到Directory.build.props

    [..]
    <PropertyGroup Condition=" $(MSBuildProjectName) != 'libfoo'">
      <OutputType>exe</OutputType>
    </PropertyGroup>
    <ItemGroup Condition=" $(MSBuildProjectName) != 'libfoo'">
      <ProjectReference Include="..\libfoo\libfoo.csproj" />
    </ItemGroup>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 2021-05-13
      • 2012-06-27
      • 2014-08-28
      相关资源
      最近更新 更多