我正在使用指南针为我的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并删除旧图像?有没有人碰到类似的东西?
答案 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.