如何使.NET核心MSBuild不为元包项目生成空程序集

如何使.NET核心MSBuild不为元包项目生成空程序集,msbuild,.net-core,Msbuild,.net Core,我在project.json中定义了一个.NET核心元包项目。它不包含代码,只包含对其他几个子项目的引用。此元包项目的存在有两个目的: 可以生成引用这些子项目的NuGet包的NuGet元包 顶层项目只能引用此元包项目,以将依赖关系链接到这些子项目 这适用于project.json——在构建元包项目时,所有引用的子项目都会被构建,而元包项目本身不会生成任何东西 现在有了.NET Core SDK 1.0,我正通过dotnet migrate从project.json迁移到.csproj,我发现行为

我在
project.json
中定义了一个.NET核心元包项目。它不包含代码,只包含对其他几个子项目的引用。此元包项目的存在有两个目的:

  • 可以生成引用这些子项目的NuGet包的NuGet元包
  • 顶层项目只能引用此元包项目,以将依赖关系链接到这些子项目
  • 这适用于
    project.json
    ——在构建元包项目时,所有引用的子项目都会被构建,而元包项目本身不会生成任何东西

    现在有了.NET Core SDK 1.0,我正通过
    dotnet migrate
    project.json
    迁移到
    .csproj
    ,我发现行为已经改变了——构建元包项目仍然会生成引用的子项目,但它本身开始生成一个空程序集。这会导致顶级项目的发布文件夹中出现一个空的
    meta package.dll
    ,我不能简单地使用构建后目标将其删除,因为它也记录在生成的
    .deps.json
    文件中,这使其成为TPA(受信任的平台程序集)的一部分。因此,简单地删除空程序集将导致应用程序在启动时崩溃


    在使用MSBuild生成此元包项目时,是否有方法不生成空程序集

    Nuget包是使用nuspec文件创建的。新的基于dotnetcore的项目系统能够为类库构建这些nuspec文件和包。这并不否认它包装了nuget和nuspec文件。如果希望控制包的生成方式,从而生成没有dll的包,则必须直接使用nuget

    您可以创建一个nuspec文件,该文件只包含您希望获取的依赖项

    nuspec文件示例:

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>MetaPackageId</id>
        <version>$VERSION$</version>
        <authors>authors</authors>
        <owners>owners</owners>
        <licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
        <projectUrl>proj url</projectUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>
          desc
        </description>
        <summary>
          summary
        </summary>
        <releaseNotes>
        View the release notes on github
        </releaseNotes>
        <copyright></copyright>
        <tags>tags</tags>
        <dependencies>
            <dependency id="APackageDependency" version="1.0.0" />
        </dependencies>
      </metadata>
    </package>
    
    
    元包装
    $VERSION$
    作者
    业主
    http://opensource.org/licenses/MIT
    项目url
    假的
    描述
    总结
    在github上查看发行说明
    标签
    
    然后可以调用nuget-pack/path/to/my.nuspec