我有MyLib
图书馆项目以及几个例子。库和示例位于同一解决方案MySolution
。
在MyLib
库项目中,我已经包含了MSBuild代码来压缩整个解决方案并复制到另一个目录进行互联网发布。
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'">
<PropertyGroup>
<ReleasePath>C:\Users\Administrator\Projects\CA\Libraries\Api-DotNet\</ReleasePath>
<ZipFile>C:\Users\Administrator\Projects\CA\WebProject\libraries\Api-DotNet.zip</ZipFile>
</PropertyGroup>
<ItemGroup>
<LibraryFiles Include="$(ReleasePath)\**\*.*" Exclude="$(ReleasePath)\**\*.user;$(ReleasePath)\**\*.suo;$(ReleasePath)\Api.*;$(ReleasePath)\**\packages\**;$(ReleasePath)\**\Lib.Test\**;$(ReleasePath)\**\*.nuspec;$(ReleasePath)\**\*.nupkg;$(ReleasePath)\**\*nuget*;$(ReleasePath)\**\*internal*;$(ReleasePath)\**\*ReSharper*\**;$(ReleasePath)\**\.svn\**;$(ReleasePath)\**\obj\**;$(ReleasePath)\lib\bin\Debug\**;$(ReleasePath)\lib\bin\Publish\**;$(ReleasePath)\Example\**\bin\**;" />
</ItemGroup>
<Zip Files="@(LibraryFiles)" WorkingDirectory="$(ReleasePath)" ZipFileName="$(ZipFile)" ZipLevel="9" />
</Target>
</Project>
问题是当用户下载库并在另一台计算机上运行时,编译器会显示错误,导致找不到导入库MSBuild.Community.Tasks.Targets
。我想在构建解决方案时从项目文件中排除ZipAndCopy代码。怎么做?
答案 0 :(得分:9)
将此Condition
添加到Import
和Zip
元素:
Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')"
例如:
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"
Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')" />
与此类似:C# Checking if a Property 'Starts/Ends With' in a csproj
答案 1 :(得分:4)
上述解决方案隐藏了项目文件加载错误,但Tomas似乎正在尝试使用MSBuild.Community.Tasks扩展中的任务。
这应该可以使用NuGet进行安装。这是源站点的link,显示我们可以通过NuGet的Package命令行安装它:
PM> Install-Package MSBuildTasks
他们的文件不是很好。您还需要使用以下方法定义路径:
<Import Project="..\Packages\MSBuildTasks.1.4.0.88\tools\MSBuild.Community.Tasks.Targets"/>
<UsingTask AssemblyFile="..\Packages\MSBuildTasks.1.4.0.88\tools\MSBuild.Community.Tasks.Targets.dll"
TaskName="MSBuild.Community.Tasks.Zip" />
...您需要将版本替换为您在NuGet中使用的版本。这并不完美,但我设法让我的工作。
NuGet会将其安装到您的解决方案/项目中继的根目录下的“包”文件夹中。
我遇到了Visual Studio可能仍在努力寻找特定位置文件的问题。如果发生这种情况,请将文件从'。\ Packages \ MSBuildTasks.1.4.0.88 \ tools *'复制到'C:\ Program Files(x86)\ MSBuild \ MSBuildCommunityTasks \'强>
这不是最优雅的,但我能够成功地让新标签发挥作用。如果我找到了解决最后一部分的方法,我会更新我的帖子。
答案 2 :(得分:3)
听起来你想要多个构建配置。我建议设置一个专门用于构建和压缩工件,并为用户单独设置。
Release ZIP
可能是使用post-build-event来构建压缩文件的构建,而Release
可能是一个普通的构建,使用社区任务不会做任何特殊的事情。