Ci sono esempi di compilazione del codice CIL all'interno di un progetto di Visual Studio
-
28-09-2019 - |
Domanda
mi rendo conto che è stato chiesto e ha risposto che Visual Studio non supporta progetti CIL / MSIL. Il href="http://msbuildcontrib.codeplex.com" rel="noreferrer"> MSBuildContrib progetto
Googled avvicinò vuoto su esempi di come utilizzare questo compito. Ci sono esempi di utilizzo ILASM come parte di una soluzione di Visual Studio?
Mi rendo conto che #develope e il supporto ILIDE CIL ... L'obiettivo è di compilare alcuni file CIL come parte di una soluzione di Visual Studio .
Soluzione
Si potrebbe aggiungere un "progetto makefile". Il modello è in Visual C ++, Generale. Questo tipo di progetto consente di specificare comandi di compilazione personalizzato per la compilazione, e ricostruire le azioni. L'ambiente sarà automaticamente messa a punto in modo da non dover pasticciare con i percorsi. Il C ++ IDE supporta anche la creazione di una regola di generazione personalizzata in modo da poter far scattare automaticamente lo strumento giusto (Ilasm.exe) dal l'estensione del file (.il).
Questo è comunque circa buono come si arriva. Non c'è la mappatura automatica di più file .IL nel progetto ad un singolo comando build. Scrivere un makefile Nmake.exe è necessaria per ottenere questo. E attenzione che le regole di generazione personalizzata supportano si è rotto in VS2010.
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:
- Creare una libreria C # classs vuoto
- Nella cartella della soluzione, fare clic destro il progetto e scegliere "progetto scaricare"
- Fare clic destro il progetto scaricato e scegliere "modifica progetto"
- 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>"$(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>