me dio 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 DE VISUAL STUDIO
El El siguiente truco le proporciona un proyecto que:
- Respeta la configuración de compilación Debug vs. Release en Visual Studio.
- Opcionalmente firma el ensamblaje CIL resultante con el archivo de clave configurado en las preferencias del proyecto.
- Se puede agregar al control de fuente.
siga estos pasos:
- crear una biblioteca classs vacía C#
- 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 seleccione "editar proyecto"
- En el archivo csprof, desplácese hasta la parte inferior y busque la línea que dice "Importar ... Proyecto =" $ (MSBuildBinPath) \ Microsoft.CSharp.targets ", y reemplácelo por el código al http://pastebin.com/KEJtyQLu (copiado a continuación)
Aquí está el 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>
¿Puedo preguntar por qué usted realmente necesita compilar con IL? ¿Qué tiene que C#/VB.NET/F # no puede hacer? – leppie
@Leppie: ese es un tema apropiado para un largo debate, basta con decir que hay (con pocas excepciones) cosas que son mucho más fáciles de lograr con IL que con C# o VB, especialmente cuando se crean genéricos que funcionan con delegados. IL, maliciosamente, le permite pcik dinámicamente y elegir qué argumentos presionar a la pila antes de invocar un método. C# y VB no.Normalmente es algo bueno, pero a veces doblar las reglas abre nuevas puertas. Los delegados dinámicos son un ejemplo de esto. – Mark
@Mark, ¿puede decirnos brevemente (o proporcionar un enlace) qué puede mejorar para los Delegados que utilizan MSIL? ¿Esto puede ayudarlo a escribir métodos que funcionen para todos los tipos de delegados? –