如何使用MSBuild 15打包多目标软件包?

5

我正在使用分发的VS2017 RC中提供的新MSBuild 15编译和打包多目标项目。

还原:msbuild /t:restore mysolution.sln可以正确工作。

构建:msbuild /p:Configuration=Release mylibrary.csproj可以正确工作并生成:

+ bin/Release
  + netstandard1.4
    - mylibrary.dll
  + net452
    - mylibrary.dll

但是当我进行打包操作时:msbuild /t:pack /p:Configuration=Release /p:IncludeSymbols=true mylibrary.csproj,生成的结构与之前的构建结果不太匹配,看起来像这样:

+ bin/Release
  + netstandard1.4
    - mylibrary.pdb
  + net452
    - mylibrary.pdb
  - mylibrary.dll

/t:pack命令中的警告提示我会发生这种情况,但不确定如何解决:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Sdks\NuGet.Build.Tasks.Pack\buildCrossTargeting\NuGet.Build.Tasks.Pack.targets(73,5): warning : Issue found with package 'MyLibrary'. [D:\XXX\YYY\src\MyLibrary\MyLibrary.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Sdks\NuGet.Build.Tasks.Pack\buildCrossTargeting\NuGet.Build.Tasks.Pack.targets(73,5): warning : Issue: Assembly not inside a framework folder. D:\XXX\YYY\src\MyLibrary\MyLibrary.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Sdks\NuGet.Build.Tasks.Pack\buildCrossTargeting\NuGet.Build.Tasks.Pack.targets(73,5): warning : Description: The assembly 'lib\MyLibrary.dll' is placed directly under 'lib' folder. It is recommended that assemblies be placed inside a framework-specific folder.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Sdks\NuGet.Build.Tasks.Pack\buildCrossTargeting\NuGet.Build.Tasks.Pack.targets(73,5): warning : Solution: Move it into a framework-specific folder. If this assembly is targeted for multiple frameworks, ignore this warning.

注意:

我没有使用 *.nuspec 文件,而是使用新的方式来处理 *.csproj文件 (https://docs.nuget.org/ndocs/schema/msbuild-targets#pack-target)

以下是文件中一些相关内容的示例:

<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <OutputType>library</OutputType>
            <TargetFrameworks>netstandard1.4;net452</TargetFrameworks>
            <AssemblyName>MyLibrary</AssemblyName>
            <Authors>XXX</Authors>
            <Description>YYY</Description>
            <PackageId>MyLibrary</PackageId>
            <PackageVersion>1.2.3</PackageVersion>
        </PropertyGroup>
</Project>

程序集 'lib\MyLibrary.dll' 直接放置在 'lib' 文件夹下。建议将程序集放置在特定于框架的文件夹中。你试过了吗? - Rabban
我使用 dotnet build /t:pack /p:Configuration=Release /p:IncludeSymbols=true mylibrary.csproj,它按预期工作。 - Zhanglong Wu - MSFT
1个回答

0

谢谢您的评论。我在它们的基础上找到了方法。

这是我做的:我重新下载了dotnet cli工具,并从头开始测试它。我意识到cli工具的版本相同,所以我开始比较里面的文件。

错误的dotnet cli版本

未能工作的版本包含以下文件:

+ dotnet
  + sdk
    + 1.0.0-preview2-1-003177
    + 1.0.0-preview2-003131
    + 1.0.0-preview2-003133
    + 1.0.0-preview4-004233

使用 dotnet build /t:pack /p:Configuration=Release /p:IncludeSymbols=true mylibrary.csproj 出现以下错误:

Couldn't find 'project.json' in '/t:pack'

好的dotnet cli版本

我下载的第二个版本只包含这些:

+ dotnet
  + sdk
    + 1.0.0-preview4-004233

在执行之前的命令时,它可以正常工作:

Microsoft (R) Build Engine version 15.1.458.808
Copyright (C) Microsoft Corporation. All rights reserved.

...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接