1

我正在尝试为 Windows/Mono 定义一个跨平台构建项目。在发布模式下编译时,构建过程的一部分会创建 nuget 包。

这是我的“AfterBuild”目标:

  <Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <PropertyGroup>
      <LocalPackagesDir Condition=" '$(LocalPackagesDir)' == '' ">$(TEMP)</LocalPackagesDir>
      <OutputPackageDir>nuget\</OutputPackageDir>
      <NuspecFile>nuget\$(ProjectName).nuspec</NuspecFile>
    </PropertyGroup>

    <Message Importance="High" Text="Building nuget package:  $(NuspecFile) ..." />
    <Exec Command="nuget pack $(NuspecFile) -OutputDirectory $(OutputPackageDir)" />

    <ItemGroup>
      <BuiltPackage Include="nuget\**\$(ProjectName)*.nupkg" />
    </ItemGroup>

    <Message Importance="High" Text="Copying nuget package: @(BuiltPackage) in local packages repository: $(LocalPackagesDir) ..." />
    <Copy SourceFiles="@(BuiltPackage)" DestinationFolder="$(LocalPackagesDir)" />
  </Target>

这与 MSBuild/Windows 完美配合,但在 Mono 下失败$(ProjectName) is empty,因为. MSBuild/XBuild 之间处理构建脚本变量的方式是否存在根本差异?

4

1 回答 1

1

尝试手动添加后备值,MyFallback.Project.Name如下所示。

<?xml version="1.0" encoding="utf-8"?>
<Project>
    <PropertyGroup>
        <ProjectName Condition=" '$(ProjectName)' == '' ">MyFallback.Project.Name</ProjectName>
    </PropertyGroup>
    <!-- The rest of the file... -->
</Project>

直接运行msbuild已经工作,并且通过 Mac 上的 Xamarin Studio 修复了这个构建。

于 2016-09-13T15:57:03.520 回答