我正在使用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
都被编译到文件夹中<rootdir>\deploy\bin\<name of the csproj file without extension\
在第二步中,我使用MSBuild.Community.Tasks
Zip-Task 压缩每个项目并将其复制到<rootdir>\deploy\dist\release\<assemblyname>-<version>.zip
所以基本上程序集project1.exe
及其依赖project1-2.4.7.zip
项在执行 msbuild 后都在文件中。
这很好用。但现在我有一个改变,我不知道如何解决。我有两个具有相同程序集名称的程序集(一个用于 Windows,另一个用于 Windows CE),因此第一个项目编译并创建一个文件夹project2-2.4.7.zip
,然后下一个项目编译并覆盖 zip 文件。
现在我希望 Zip-File 以文件命名.csproj
(如 bin 文件夹)。由于我的一个项目文件被调用mycompany.project2.csproj
,而另一个mycompany.project2-ce.csproj
我应该没问题。
简而言之:如何将项目名称传递给 zip 目标?