2015-04-14 3 views
0

Я использую компас для создания стилей и спрайтов изображений для моего проекта C# MVC .NET. В основном это здорово, и все работает без проблем. Тем не менее, я хотел бы использовать функциональность MSBuild «Опубликовать» как часть моей автоматической сборки. Проблема заключается в том, что компас генерируется спрайтов изменить имена все время, и поэтому я получаю ошибки, как этот, когда я пытаюсь построить:MSBuild Publish and Compass Сгенерированные спрайты

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 и удалять старые? Кто-нибудь сталкивается с чем-то подобным?

ответ

2

Из моего личного опыта, развертывание или публикация в Интернете из Visual Studio собирает файлы, которые не являются частью вашего решения, если они являются частью веб-приложения в файловой системе.

Для примера:

MVCSite
- изображения/spirtes.png

Если вы публикуете из этой копии MVC сайта, содержимое папки изображения будут воспроизведены на вашем веб-сервере даже если они не включены в файл проекта.

--- Отредактировано

выше решение будет работать с веб-сайтом, а не веб-приложения. Следующее будет работать с веб-приложением.

Добавьте это к концу профиля издания (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. 
+0

... К сожалению, конечно Бесполезный 't означает downvote, но не уверен, что я тоже готов поддержать это. Я занимаюсь развертыванием файловой системы, так как это нужно передать операциям для фактического развертывания. В настоящее время основным преимуществом является то, что публикация применяет преобразования к web.config. Но ... Я бы хотел как можно больше использовать MS, встроенные в процессы и потенциальные скрытые преимущества. Вы говорите, что я могу опубликовать «images /» и что «images/sprite.png», «images/other-sprite.png», «images/yet-another-sprite.png», «images/* .png» «все будут опубликованы? – jameslafferty

+0

Я обновил ответ, чтобы включить что-то, что будет работать для веб-приложений –

+0

Спасибо, Скотт! Работает как шарм. – jameslafferty

Смежные вопросы