MSBuild 发布和罗盘生成的精灵

MSBuild Publish and Compass Generated Sprites

我正在使用 compass 为我的 C# MVC .NET 项目生成样式表和图像精灵。大多数情况下,这很棒,一切都可以无缝运行。但是,我希望能够使用 MSBuild "Publish" 功能作为我的自动构建的一部分。问题是指南针生成的精灵总是更改名称,所以当我尝试构建时出现这样的错误:

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 并删除旧图像?有人 运行 喜欢类似的东西吗?

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

例如:

MVCSite
-- images/spirtes.png

如果您从 MVC 站点的这个副本发布,images 文件夹的内容将被复制到您的 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.