24/2/2009 20:52
El Bruno
[Silverlight] Sobre los Proyectos, Expression Blend, SubsetFontSilverlight.targets y los problemas con el Source Control
Buenas,
si yo fuese un personaje en My Name is Earl además de perseguir a Joey seguramente cerraría cada capítulo con una moraleja y una enseñanza más en mi haber. Pues creo que esa es la única forma en la que puedo trabajar con Silverlight; personalmente no me considero un experto en ninguna materia sin embargo creo conocer un poco de Visual Studio, pero Silverlight me sorprende cada día.
En este caso, luego de tirar líneas durante varios de días, de cerrar varias pruebas de concepto; llegó el momento de refactorizar los proyectos para comenzar a trabajar más organizado. En este momento en base a la experiencia de las pruebas de concepto, comienzo a organizar mis directorios, es decir, renombrar, subir, bajar, etc.
Una vez finalizado, con todo el código dentro del gestor de codigo fuente (TFS obviamente), al momento de abrir un proyecto de Silverlight me encuentro con el siguiente mensaje de error:
---------------------------
Microsoft Visual Studio
---------------------------
Unable to read the project file 'Avanade.Silverlight.DirectiveDashboard.csproj'.
C:\PW SL\Source\Silverlight\Avanade.ProductivityWorkspace\Avanade.Silverlight.DirectiveDashboard\
Avanade.Silverlight.DirectiveDashboard.csproj(190,11): The imported project
"C:\PW SL\Source\Silverlight\Avanade.ProductivityWorkspace\
Avanade.Silverlight.DirectiveDashboard\SubsetFontSilverlight.targets" was not found.
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
---------------------------
OK
---------------------------
Y es en este momento donde me pregunto, ¿de donde ha salido ese archivo SubsetFontSilverlight.targets?
Tratando de entender un poco más, edito el archivo de proyecto y me encuentro con el import correspondiente
1: <Project ToolsVersion="3.5" DefaultTargets="Build"
2: xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3: ...
4: <ProjectExtensions>
5: <VisualStudio>
6: <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">
7: <SilverlightProjectProperties />
8: </FlavorProperties>
9: </VisualStudio>
10: </ProjectExtensions>
11: <Import Project="SubsetFontSilverlight.targets" />
12: </Project>
Como soy una persona organizada, reviso el backup anterior y encuentro el archivo SubsetFontSilverlight.targets, pero como el mismo se ha agregado desde fuera del Source Control, no está relacionado con el proyecto. Lo agrego al directorio de proyecto y ya todo comienza a funcionar correctamente, pero sigo con la duda de donde salió este archivo.
Asi que me pongo a leer un rato y me encuentro con que a este archivo lo genera Microsoft Expression Blend cuando realizamos algunas acciones particulares en nuestros diseños (por ejemplo embeber Fonts). Pero lo más interesante es que en la cabecera del mismo se incluye una referencia a una tarea de MSBuild contenida dentro del ensamblado SubsetFontTask.dll. (ver las líneas 2 y 3 del codigo del archivo)
Asi que resulta que también debo copiar el ensamblado SubsetFontTask.dll al directorio de proyecto para que el mismo funcione correctamente, y no olvidarme de agregar estos archivos al control de código fuente.
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2: <UsingTask AssemblyFile="SubsetFontTask.dll" TaskName="SubsetFontTask.SubsetFontsSilverlight" />
3: <UsingTask AssemblyFile="SubsetFontTask.dll" TaskName="SubsetFontTask.CleanSubsetFonts" />
4:
5: <ItemGroup Condition="'$(BuildingInsideVisualStudio)'=='true'">
6: <AvailableItemName Include="BlendEmbeddedFont"/>
7: </ItemGroup>
8:
9: <Target Name='SubsetFontsSilverlight' DependsOnTargets="$(SubsetFontsDependsOn)" Condition="'@(BlendEmbeddedFont)' != ''">
10: <SubsetFontsSilverlight
11: Fonts="@(BlendEmbeddedFont)" Xamls="@(Page)" Resources="@(Resources)"
12: IntermediateFilesDirectory="$(IntermediateOutputPath)"
13: >
14: <Output TaskParameter="SubsettedFonts" ItemName="Resource"/>
15: </SubsetFontsSilverlight>
16: </Target>
17:
18: <Target Name='CleanSubsetFonts' DependsOnTargets="$(CleanSubsetFontsDependsOn)" Condition="'@(BlendEmbeddedFont)' != ''">
19: <CleanSubsetFonts
20: Fonts="@(BlendEmbeddedFont)"
21: IntermediateFilesDirectory="$(IntermediateOutputPath)"
22: />
23: </Target>
24:
25: <PropertyGroup>
26: <PrepareResourcesDependsOn>
27: SubsetFontsSilverlight;
28: $(PrepareResourcesDependsOn);
29: </PrepareResourcesDependsOn>
30: </PropertyGroup>
31:
32: <PropertyGroup>
33: <CleanDependsOn>
34: $(CleanDependsOn);
35: CleanSubsetFonts;
36: </CleanDependsOn>
37: </PropertyGroup>
38:
39: </Project>
Saludos @ Home
El Bruno
Crossposting from ElBruno.com
Archivado en: Visual Studio,Team Foundation Server,Silverlight
Comparte este post: