2009-05-21 13 views
24

Tengo un script que convertirá un archivo de texto en un archivo de recursos, de modo que pueda tener compatibilidad con varios idiomas al tener archivos de texto para diferentes idiomas convertidos en recursos diferentes. Una vez que ejecuto el script para obtener el archivo resx, entonces tengo que ejecutar una herramienta de compilación personalizada (como se describe aquí: Link to Code Project) para crear los archivos Designer.cs para usar los nuevos archivos.Ejecutar una herramienta personalizada de Visual Studio en tiempo de compilación

De acuerdo con la filosofía de que debería ser capaz de construir todo el proyecto con un solo clic, ¿cómo puedo eliminar el paso donde tengo que llamar explícitamente la herramienta de compilación personalizada para hacer que el código subyazca a los archivos?

He intentado eliminar automáticamente los archivos Designer.cs como un paso previo a la compilación, ya que creo que la herramienta de compilación personalizada se ejecutará automáticamente si no hubiera archivos Designer.cs, pero no dados.

Por lo tanto, quiero que mi script de compilación en Visual Studio/msbuild hacer: 1) convertir texto a ResX (hecho) 2) mover archivos resx al directorio apropiado (hecho) 3) crear archivos usando designer.cs una herramienta de generación personalizada (no realizado)

es el último paso ...

Respuesta

3

Por desgracia no creo que hay una manera fácil de hacer esto. Las herramientas de compilación personalizadas solo se ejecutan desde VS.NET; no se ejecutan cuando construyes tu proyecto usando MSBuild desde la línea de comandos.

En general, si tiene la opción de escribir una herramienta de compilación como herramienta de compilación del cliente o una tarea de MSBuild, elija la tarea MSBuild cada vez que estas tareas se ejecuten en VS.NET y desde la línea de comandos.

Los archivos designer.cs de recursos están ahí para respaldar su codificación. Le otorgan acceso fuertemente tipado en el archivo de recursos. Por lo tanto, siempre y cuando cree sus recursos invariantes de cultivo en VS.NET (y deje que cree los archivos .designer.cs), entonces agregar soporte de idioma adicional más adelante (archivos .resx adicionales) debería funcionar bien.

Sin embargo, si sus archivos de texto son sus archivos de recursos principales y está agregando nuevas cadenas de recursos en estos archivos de texto primero, entonces necesitará encontrar otra forma de generar archivos .cs que le permitan codificar contra esos recursos. Si TIENE que hacerlo, generar el archivo .designer.cs usted mismo (o algo similar) no sería tan difícil. Con CodeDom o T4 puede crear la clase auxiliar, utilizando un archivo .designer.cs existente como plantilla.

0

¿Ha intentado agregar un paso Exec en el paso Antes/Después de construir en su csproj? Tienes que editar manualmente el archivo para esto, pero eso debería resolver tu problema.

No estoy del todo claro si desea hacer esto antes o después de la compilación. Si lo necesita algún día después de Pass1/Pass2, puede conectar directamente con los objetivos. Intente buscar en Microsoft.Build.Common.Targets para tener una idea de cómo hacer esto.

2

Hay una forma de generar * .Designer.cs para * .resx como parte del proceso de compilación. Hay una tarea incorporada de MSBuild GenerateResource, que básicamente es un envoltorio alrededor de la herramienta SDK resgen.exe. Here puede encontrar un ejemplo de cómo usarlo.

Otra cosa que le resultaría útil, si la versión * .Designer.cs generada no es correcta, básicamente, la tarea GenerateResource no está llamando a la versión deseada de resgen.exe, estableciendo la propiedad SdkToolsPath podría ayudarlo.

Cuestiones relacionadas