【问题标题】:Get the assembly project file name from Output TaskParameter从 Output TaskParameter 中获取程序集项目文件名
【发布时间】:2012-08-20 13:59:17
【问题描述】:

我正在使用 msbuild.exe 从命令行自动构建。

我执行以下步骤。

  • 将项目编译到项目目录之外的文件夹中
  • 压缩每个编译的项目

这是我的目标

第一个编译

<Target Name="BuildProjects"  DependsOnTargets="BeforeBuild">

    <ItemGroup>      
  <BuildProjectFiles Include="**\MyCompany.Project1\MyCompany.Project1.csproj" />
  <BuildProjectFiles Include="**\MyCompany.Project2\MyCompany.Project2.csproj" />
  <BuildProjectFiles Include="**\MyCompany.Project2\MyCompany.Project2-CE.csproj" />
      ... and some more
    </ItemGroup>

    <MSBuild Projects="@(BuildProjectFiles)" Properties="AllowUnsafeBlocks=true;Configuration=$(Configuration);OutputPath=$(MSBuildProjectDirectory)\Deploy\bin\%(BuildProjectFiles.FileName)">
        <Output TaskParameter="TargetOutputs"
                ItemName="BuildProjectsOutputFiles" />
    </MSBuild>

</Target>

现在的目标是将每个已编译的项目压缩到一个文件中。

<Target Name="ZipProjects" DependsOnTargets="BuildProjects">

    <CreateItem
        Include="@(BuildProjectOutputFiles)"
            AdditionalMetadata="AssemblyName=%(Filename);ProjectName=%(RelativeDir)">
        <Output TaskParameter="Include" ItemName="BuildProjectsOutputFiles123"/>
    </CreateItem>

    <CreateItem Include="%(BuildProjectsOutputFiles123.RelativeDir)*" AdditionalMetadata="OutputFileName=$(MSBuildProjectDirectory)\Deploy\dist\$(Configuration)\%(BuildProjectsOutputFiles123.AssemblyName)-$(MajorNumber).$(MinorNumber).$(ReleaseNumber).zip;WorkingDirectory=%(BuildProjectsOutputFiles123.RelativeDir)">
        <Output TaskParameter="Include" ItemName="BuildProjectsOutputFiles456"/>
    </CreateItem>

    <Zip Files="@(BuildProjectsOutputFiles456)"
        WorkingDirectory="%(BuildProjectsOutputFiles456.WorkingDirectory)" 
        ZipFileName="%(BuildProjectOutputFiles456.OutputFileName)"  />
        <!-- ZipLevel="9"/> -->

</Target>

所以我在BuildProjectFiles 中指定的每个项目都会被编译到&lt;rootdir&gt;\deploy\bin\&lt;name of the csproj file without extension\ 文件夹中

在第二步中,我使用MSBuild.Community.Tasks Zip-Task 压缩每个项目并将其复制到&lt;rootdir&gt;\deploy\dist\release\&lt;assemblyname&gt;-&lt;version&gt;.zip

所以基本上程序集project1.exe 及其依赖项在执行msbuild 后都在文件project1-2.4.7.zip 中。

效果很好。但现在我有一个改变,我不知道如何解决。我有两个具有相同程序集名称的程序集(一个用于 Windows,另一个用于 Windows CE),因此第一个项目编译并创建一个文件夹 project2-2.4.7.zip,然后下一个项目编译并覆盖 zip 文件。

现在我希望 Zip 文件以 .csproj 文件命名(如 bin 文件夹)。 由于我的一个项目文件名为 mycompany.project2.csproj 而另一个名为 mycompany.project2-ce.csproj 我应该没问题。

简而言之:如何将项目名称传递给 zip 目标?

【问题讨论】:

    标签: c# .net msbuild


    【解决方案1】:

    这样合适吗? $(MSBuildProjectName)

    MSBuild Reserved Properties

    【讨论】:

    • 不,因为我的目标位于文件build.targets 中,这将生成一个build-2.4.7.zip 文件(对于每个项目并覆盖以前的文件)。但是感谢您分享链接,将来可能会有用。我真正需要的是将%(BuildProjectsInputFiles.FileName) 传递给BuildProjectsOutputFiles,这样我就可以从BuildProjectsOutputFiles123 访问它
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多