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.
我正在使用 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.