Para poder publicar una DLL en el GAC, es necesario que esté firmada.
Adicionalmente, para poderla utilizar en fuentes cuyo framework es 4.5.1, es necesario recompilarla en dicha versión.
Dado que no es posible firmar la LibX.dll ni actualizar su framework (porque si se hace habría que recompilar todos los fuentes que la utilicen), se definió un post-build event, que realiza las siguientes acciones:
1. Compilar la librería en la versión framework 4.5.1 (dejando la .dll resultante en una carpeta auxiliar)
2. Firmar la .dll con la clave disponible para dicha librería (el archivo keyLibX.snk en este caso)
3. Instalar la .dll firmada en el GAC, mediante gacutil
Este es el código del post-build event:
call "$(DevEnvDir)..\Tools\vsvars32.bat"
IF NOT EXIST c:\temp\$(TargetName)\OutDir mkdir C:\temp\$(TargetName)\OutDir
IF NOT EXIST c:\temp\$(TargetName)\Signed mkdir C:\temp\$(TargetName)\Signed
IF NOT EXIST $(TargetDir)\Signed mkdir $(TargetDir)\Signed
msbuild.exe $(ProjectPath) /p:TargetFrameworkVersion=v4.5.1;Configuration=Release /tv:4.0 /t:Rebuild /p:OutDir=c:\temp\$(TargetName)\Outdir /p:PreBuildEvent= /p:PostBuildEvent=
ildasm.exe $(TargetPath) /out:$(TargetDir)\Signed\$(TargetName).il
ilasm.exe $(TargetDir)\Signed\$(TargetName).il /dll /key=$(ProjectDir)\keyLibX.snk /output=$(TargetDir)\Signed\$(TargetName).dll
gacutil.exe /i $(TargetDir)\Signed\$(TargetName).dll /f
El objetivo de este post-build event, es lograr que una .dll que no esté firmada y en una versión anterior de framework, llegue al GAC con la versión 4.5.1 de framework, sin modificar el fuente del proyecto para no afectar a los otros desarrollos que la utilizan.
No hay comentarios:
Publicar un comentario