¿Hay ejemplos de compilar el código CIL desde dentro de un proyecto de Visual Studio
-
28-09-2019 - |
Pregunta
Me da cuenta de que ha sido hecha y contestada que Visual Studio no es compatible proyectos CIL / MSIL. El proyecto href="http://msbuildcontrib.codeplex.com" rel="noreferrer"> tiene una tarea ILASM que le permite compilar archivos IL en tiempo de compilación.
Googled encontró nada en ejemplos de cómo usar esta tarea.
¿Hay ejemplos de la utilización de ILASM como parte de una solución de Visual Studio? Soy consciente de que #develope y apoyo ILIDE CIL ... El objetivo aquí es para compilar algunos archivos CIL como parte de una solución de Visual Studio .
Solución
Se podría añadir un "proyecto de archivo MAKE". La plantilla está bajo Visual C ++, el general. Este tipo de proyecto le permite especificar los comandos de generación personalizada para la construcción, limpio y acciones de reconstrucción. El entorno se configurará automáticamente para que usted no tiene que meterse con las rutas. El IDE C ++ también soporta la creación de una regla de generación personalizada para que pueda desencadenar automáticamente la herramienta adecuada (ilasm.exe) de la extensión de nombre de archivo (.il).
Esto es sin embargo casi tan bueno como se pone. No existe asignación automática de varios archivos .Il en el proyecto a un solo comando de construcción. Escribir un makefile Nmake.exe se requiere para conseguir eso. Y ten en cuenta que las reglas de encargo conseguir apoyo se rompieron en VS2010.
Otros consejos
Le di crédito Hans para responder a esta pregunta, pero después de un poco de experimentación Tengo una solución que viene un poco más cerca de casa:
cómo compilar CIL / MSIL dentro del estudio VISUAL
El siguiente truco que consigue un proyecto que:
- Respeta la configuración de lanzamiento vs versión de depuración en Visual Studio.
- Opcionalmente firma el CIL resultante montaje con el archivo de claves establecido en las preferencias del proyecto.
- Puede ser añadido al control de origen.
Siga estos pasos:
- Crear una biblioteca de C # classs vacío
- En la carpeta de soluciones, haga clic derecho en el proyecto y elegir la opción "Descargar proyecto"
- Haga clic derecho en el proyecto sin carga y selecciona "editar proyecto"
- En el archivo csprof, desplazarse hasta la parte inferior, y encontrar la línea que dice "Importar ... Proyecto =" $ (MSBuildBinPath) \ Microsoft.CSharp.targets", y sustituirlo por el código en http://pastebin.com/KEJtyQLu (copiado a continuación)
Aquí está el código XML:
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
<Target Name="CreateManifestResourceNames" />
<Target Name="CoreCompile" Inputs="$(MSBuildAllProjects);@(Compile);" Outputs="@(IntermediateAssembly);$(NonExistentFile);">
<GetFrameworkPath>
<Output TaskParameter="Path" PropertyName="FrameworkPath" />
</GetFrameworkPath>
<PropertyGroup>
<IlAsmCommand>"$(FrameworkPath)\Ilasm.exe" /NOLOGO /DLL /OUTPUT:"@(IntermediateAssembly)" </IlAsmCommand>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' " >
<IlAsmCommand>$(IlAsmCommand) /DEBUG </IlAsmCommand>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' " ><IlAsmCommand>$(IlAsmCommand) /OPTIMIZE </IlAsmCommand></PropertyGroup>
<PropertyGroup Condition=" '$(AssemblyOriginatorKeyFile)' != '' " >
<IlAsmCommand>$(IlAsmCommand) /KEY:"$(AssemblyOriginatorKeyFile)" </IlAsmCommand>
</PropertyGroup>
<Exec Command="$(IlAsmCommand) @(Compile->'"%(FullPath)"', ' ')"
Outputs="@(IntermediateAssembly)" />
<CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''" />
</Target>