如何使.NET Core MSBuild不为元数据包项目生成空程序集

时间:2017-03-19 00:07:30

标签: msbuild .net-core

我在project.json中定义了一个.NET Core元包项目。它不包含任何代码,只是引用了一些其他子项目。这个元包项目有两个目的:

  1. 可以生成一个NuGet元数据包,引用这些子项目的NuGet包。
  2. 顶级项目只能引用此元数据包项目,以将依赖项链接到这些子项目。
  3. 这适用于project.json - 在构建元包项目时,所有引用的子项目都会构建,并且元包项目本身不会产生任何内容。

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

    在使用MSBuild构建此元包项目时,有没有办法不生成空组件?

1 个答案:

答案 0 :(得分:0)

使用nuspec文件创建Nuget包。新的基于dotnet核心的项目系统能够为您的类库构建这些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>

然后你可以调用nuget pack /path/to/my.nuspec