Ci sono esempi di compilazione del codice CIL all'interno di un progetto di Visual Studio

StackOverflow https://stackoverflow.com/questions/4068425

  •  28-09-2019
  •  | 
  •  

Altri suggerimenti

Ho dato Hans credito per rispondere a questa domanda, ma dopo qualche sperimentazione Ho una soluzione che arriva un po 'più vicino a casa:

come compilare CIL / MSIL ALL'INTERNO VISUAL STUDIO

Il seguente trucco si ottiene un progetto che:

  • rispetta la Debug vs rilascio configurazione di generazione in Visual Studio.
  • Opzionalmente firma il CIL risultante assembly con il file di chiave impostato nelle preferenze del progetto.
  • Può essere aggiunto al controllo del codice sorgente.

le seguenti operazioni:

  1. Creare una libreria C # classs vuoto
  2. Nella cartella della soluzione, fare clic destro il progetto e scegliere "progetto scaricare"
  3. Fare clic destro il progetto scaricato e scegliere "modifica progetto"
  4. Nel file csprof, scorrere fino in fondo, e trovare la linea che dice "Importa ... Progetto =" $ (MSBuildBinPath) \ Microsoft.CSharp.targets", e sostituirlo con il codice a http://pastebin.com/KEJtyQLu (copiato sotto)

Ecco il 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>&quot;$(FrameworkPath)\Ilasm.exe&quot; /NOLOGO /DLL /OUTPUT:&quot;@(IntermediateAssembly)&quot; </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:&quot;$(AssemblyOriginatorKeyFile)&quot; </IlAsmCommand>
    </PropertyGroup>

    <Exec Command="$(IlAsmCommand) @(Compile->'&quot;%(FullPath)&quot;', ' ')" 
          Outputs="@(IntermediateAssembly)" />

    <CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''" />

  </Target>
scroll top