MSBuild发布和指南针生成的精灵

时间:2015-04-14 23:32:30

标签: asp.net-mvc visual-studio msbuild compass

我正在使用指南针为我的C#MVC .NET项目生成样式表和图像精灵。大多数情况下这很棒,一切都可以无缝运行。但是,我希望能够将MSBuild“发布”功能用作自动构建的一部分。问题是罗盘生成的精灵一直在改变名字,所以当我尝试构建时,我会得到像这样的错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets(2972,5): error : Copying file images\icons-s88f86b4a16.png to obj\Release\Package\PackageTmp\images\icons-s88f86b4a16.png failed. Could not find file 'images\icons-s88f86b4a16.png'.

我不知道如何解决这个问题。有没有办法自动将新图像添加到csproject并删除旧图像?有没有人碰到类似的东西?

1 个答案:

答案 0 :(得分:2)

根据我的个人经验,Web部署或从Visual Studio发布将选择不属于您的解决方案的文件,只要它们是文件系统上的Web应用程序的一部分。

例如:

MVCSite
    - images / spirtes.png

如果您要从此MVC站点副本发布,则图像文件夹的内容将在您的Web服务器上复制,即使它们未包含在项目文件中。

---已编辑

上述解决方案适用于网站而非网络应用程序。以下内容适用于Web应用程序。

将此添加到发布配置文件(Production.pubxml)的末尾

  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="Test\**\*" />
      <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)   </DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>
  <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>

    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForMsdeployDependsOn>
  </PropertyGroup>
</Project>

示例构建脚本

echo 'Hello, world.' > "%WORKSPACE%\TestMVC\Test\fo1.txt"

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" "%WORKSPACE%\TestMVC.sln" /p:Configuration=Release /p:Platform="Any CPU" /p:PublishProfile=Production

MSBuild的输出

Copying Test\fo1.txt to obj\Release\Package\PackageTmp\fo1.txt.
Copying Test\foo.txt to obj\Release\Package\PackageTmp\foo.txt.