找不到MSBuild社区任务

Tom*_*mas 11 c# msbuild visual-studio-2010

我有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>
Run Code Online (Sandbox Code Playgroud)

问题是当用户下载库并在另一台计算机上运行时,编译器会显示错误,导致找不到导入库MSBuild.Community.Tasks.Targets.我想在构建解决方案时从项目文件中排除ZipAndCopy代码.怎么做?

Pre*_*gha 9

将它添加Condition到元素ImportZip元素:

Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Commu??nity.Tasks.Targets')"
Run Code Online (Sandbox Code Playgroud)

例如:

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"
        Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Commu??nity.Tasks.Targets')" />
Run Code Online (Sandbox Code Playgroud)

与此类似:C#检查csproj中的属性是否"开始/结束"


jus*_*n23 7

上述解决方案隐藏了项目文件加载错误,但 Tomas 似乎试图使用 MSBuild.Community.Tasks 扩展中的 Task。

这应该可以使用 NuGet 安装。这是源站点的链接,显示我们可以通过 NuGet 的包命令行安装它:

PM> Install-Package MSBuildTasks
Run Code Online (Sandbox Code Playgroud)

他们的文档不是很好。您还需要使用以下方法定义路径:

<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" />
Run Code Online (Sandbox Code Playgroud)

...您需要使用您从 NuGet 使用的版本替换版本。这并不完美,但我设法让我的工作。

NuGet 会将其安装到解决方案/项目主干根目录下的“Packages”文件夹中。

我遇到了一些问题,Visual Studio 可能仍在努力寻找特定位置中的文件。如果发生这种情况,请将文件从'.\Packages\MSBuildTasks.1.4.0.88\tools*'复制到'C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\'

这不是最优雅的,但我能够成功地让新标签工作。如果我找到解决这最后一部分的方法,我会更新我的帖子。


J. *_*een 3

听起来您想要多个构建配置。我建议专门设置一个用于构建和压缩工件,并为您的用户设置一个单独的。

Release ZIP可以是使用构建后事件来压缩文件的构建,也Release可以是不使用社区任务执行任何特殊操作的普通构建。