У меня возникла странная проблема с моим проектом Silverlight 4, хотя это тот, который я видел раньше. По сути, встраивание шрифтов заставляет мое приложение Silverlight всегда перестраиваться, даже если все в актуальном состоянии. Такой отстой, поскольку задача вставки шрифта занимает много памяти и в конечном итоге приведет к сбою VS. Я хотел бы иметь возможность построить проект из командной строки, но независимо от того, какие мои локальные проекты устарели, команда «Запустить» заставляет другую перестроить. Я попытался вырезать некоторые из соответствующих данных журнала из моего журнала msbuild.Вложение шрифтов заставляет Silverlight проект всегда перестраивать
Project "D:\Projects\Test\Test.Web\Test.Web.csproj" (10) is building "D:\Projects\Test\Test.SL\Test.SL.csproj" (2:4) on node 1 (default targets).
Building with tools version "4.0".
// Build operation starts normally (well, the dependency set on the server project is forcing the SL application to build).
...
Target "ResolveReferences" skipped. Previously built successfully.
// A bunch of tasks are skipped (like this one)
...
Target "SubsetFontsSilverlight" in file "C:\Program Files\MSBuild\Microsoft\Expression\Blend\Silverlight\v4.0\SubsetFontSilverlight.targets" from project "D:\Projects\Test\Test.SL\Test.SL.csproj" (target "PrepareResources" depends on it):
Using "SubsetFontsSilverlight" task from assembly "C:\Program Files\MSBuild\Microsoft\Expression\Blend\Silverlight\v4.0\SubsetFontTask.dll".
Task "SubsetFontsSilverlight"
Done executing task "SubsetFontsSilverlight".
Done building target "SubsetFontsSilverlight" in project "Test.SL.csproj".
// this task never gets skipped
...
Target "MainResourcesGeneration" in file "C:\Program Files\MSBuild\Microsoft\Silverlight\v4.0\Microsoft.Silverlight.Common.targets" from project "D:\Projects\Test\Test.SL\Test.SL.csproj" (target "PrepareResources" depends on it):
Building target "MainResourcesGeneration" completely.
Input file "obj\Debug\Fonts\Fonts.zip" is newer than output file "obj\Debug\Test.SL.g.resources".
// note that the Fonts.zip file now makes the resources file out of date
...
Target "CoreCompile" in file "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.Targets" from project "D:\Projects\Test\Test.SL\Test.SL.csproj" (target "Compile" depends on it):
Building target "CoreCompile" completely.
Input file "obj\Debug\Test.SL.g.resources" is newer than output file "obj\Debug\Test.SL.pdb".
// and the full recompile begins...
Как бы то ни было, есть способ остановить выполнение задачи шрифта, если файлы шрифтов не изменились? Потому что постоянные перестройки действительно раздражают.
Обновление: образец шрифта из файла проекта.
<BlendEmbeddedFont Include="Fonts\MyriadPro-BoldIt.otf">
<IsSystemFont>True</IsSystemFont>
<All>True</All>
<AutoFill>True</AutoFill>
<Characters>
</Characters>
<Uppercase>True</Uppercase>
<Lowercase>True</Lowercase>
<Numbers>True</Numbers>
<Punctuation>True</Punctuation>
</BlendEmbeddedFont>
Update 2:
Я хотел бы опубликовать немного REPRO проект, но я не уверен, куда бросить файл почтового индекса. В любом случае, за несколько секунд можно взломать. Вот шаги:
Создание Sillverlight приложения (Blend, или VS, хотя вам нужно Смешать для этой работы, так или иначе)
Используйте Font Manager (Tools -> Font Manager) в Blend, вы возможно, придется открыть MainPage.xaml, чтобы он стал включенным. Вставьте шрифт «Tahoma».
Теперь, каждый раз, когда вы нажмете «Rebuild» вы можете убедиться, что csc.exe запускается каждый раз, независимо от того, было ли изменено что-нибудь или нет.
Вы решили вставить только символы, используемые из этого шрифта? Это всегда заставляет перестроить, когда он снова считывает весь текст, чтобы создать карту символов для вставки. Если бы вы могли опубликовать файл MSBuild (соответствующая часть с шрифтом), это было бы полезно. –
@ Otaku: Это стандартный шрифт, встроенный в Blend 4. Я думаю, что есть возможность делать то, что вы говорите, но это, кажется, более широкий поднабор. Но в любом случае, даже если он был настроен для анализа используемых символов, почему это происходит, когда исходные файлы не изменились? – Egor