64 votes

Comment obtenir le chemin d'accès à csc.exe ?

Existe-t-il un moyen d'obtenir le chemin d'accès à la dernière version de csc.exe du .NET Framework ?

Le fichier se trouve généralement dans : c : \Windows\Microsoft.NET\Framework\vX.X.XXX mais le problème est qu'il peut y avoir plusieurs versions installées + il y a des versions 32 et 64 bits.

Une solution à ce problème ?

33voto

Liquid Wotter Points 463

C : \Windows\Microsoft.NET\Framework\vX.X.XXX Doit contenir la dernière version 32 bits de csc.exe

c : \Windows\Microsoft.NET\Framework64\vX.X.XXX Doit contenir la dernière version 64 bits de csc.exe

C'est en tout cas ce qu'il en est pour le mien.

BTW : Vous pouvez accéder aux deux en utilisant la ligne de commande de Visual Studio à partir de votre dossier d'outils Visual Studio dans vos fichiers de programme. Il configure automatiquement tous les chemins dont vous avez besoin pour construire des applications 32 et 64 bits avec votre compilateur csc.

19voto

Bear Points 161

La meilleure façon de trouver CSC.exe Le chemin d'accès est exécuté en CLI (Command Line Interpreter), c'est-à-dire en ligne simple :

dir /s %WINDIR%\CSC.EXE

dir - affiche le répertoire

/s - inclut les sous-dossiers

%WINDIR% \CSC.EXE - recherche dans le dossier racine une phrase telle que "CSC.exe".

Et c'est notre résultat : enter image description here

Ensuite, nous pouvons simplement compiler le code de l'exemple ligne par ligne, comme suit :

C:\WINDOWS\...\v.4.0.30319\CSC.exe HelloWorld.cs

Voir aussi.

14voto

Samuel Neff Points 35554

Vous pouvez utiliser System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() .

using System.Runtime.InteropServices;
var frameworkPath = RuntimeEnvironment.GetRuntimeDirectory();
var cscPath = Path.Combine(frameworkPath, "csc.exe");

Console.WriteLine(frameworkPath);  // C:\Windows\Microsoft.NET\Framework\v4.0.30319
Console.WriteLine(cscPath); }      // C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe

11voto

naveddeshmukh Points 436

Mise à jour :

Ouvrez l'Invite de commande ou Powershell et exécutez la commande ci-dessous pour lister le chemin complet des compilateurs pour les différentes versions de .Net Frameworks installées.

dir %WINDIR%\Microsoft.NET\Framework64\csc.exe /s/b

Le parcours du CSC est le suivant :

C:\Program Dossiers \MSBuild\\Bin

Ex : Ce sera 12.0, si vous utilisez Visual Studio 2013.

7voto

Matt Points 3445

Je suppose que vous voulez utiliser csc.exe pour compiler des fichiers sur un PC ordinaire, sans développeur, c'est pour cela que vous demandiez le chemin.

Plutôt que de chercher dans le registre, vous pouvez utiliser le petit fichier batch suivant script que j'ai créé pour obtenir le chemin d'accès au fichier dernier csc.exe disponible ; le chemin est déterminé dans la première section du script et puis stocké dans la variable d'environnement dotNet :

@echo off
pushd .& setlocal

set dotNetBase=%SystemRoot%\Microsoft.NET\Framework\
rem get latest .net path containing csc.exe:
set dotNet20=%dotNetBase%v2.0.50727\
set dotNet35=%dotNetBase%v3.5\
set dotNet40=%dotNetBase%v4.0.30319\
if exist %dotNet20%nul set dotNet=%dotNet20%
if exist %dotNet35%nul set dotNet=%dotNet35%
if exist %dotNet40%nul set dotNet=%dotNet40%
set msbuildDir=%ProgramFiles(x86)%\MSBuild\14.0\Bin\
set cscExe="%msbuildDir%csc.exe"
if not exist %cscExe% set cscExe="%dotNet%csc.exe"
::echo %cscExe%

set assemblies=
REM reference required assemblies here, copy them to the output directory after the colon (:), separated by comma
REM set assemblies=-reference:.\PresentationCore.Dll,.\WindowsBase.dll

set runArgs=%3 %4 %5 %6 %7 %8 %9 
if not "%1"=="/run" (set outPath=%~DP1& set outFileName=%~n1& CALL :Compile) else (set outPath=%~DP2& set outFileName=%~n2& CALL :CompileAndRun)
GOTO :End

:Compile
    echo Compiling "%outPath%%outFileName%.cs"
    if exist "%outPath%%outFileName%.exe" del /F "%outPath%%outFileName%.exe" 
    %cscExe% -optimize+ -lib:"%dotNet%\" %assemblies% /t:exe /out:"%outPath%%outFileName%.exe" %outFileName%.cs
exit /B

:CompileAndRun
    echo Compiling "%outPath%%outFileName%.cs"
    if exist "%outPath%%outFileName%.exe" del /F "%outPath%%outFileName%.exe" 
    %cscExe% -optimize+ -lib:"%dotNet%\" %assemblies% /t:exe /out:"%outPath%%outFileName%.exe" %outFileName%.cs >nul
    echo Running "%outPath%%outFileName%.exe"
    "%outPath%%outFileName%.exe" %runArgs%
exit /B

:End 
::::

Il utilisera ensuite ce chemin pour invoquer le dernier compilateur C# disponible intégré dans Windows. Notez que Visual Studio utilise des compilateurs C# plus récents que Windows. Avec Windows, vous êtes limité à la version 5 de C#. Il est important de garder cela à l'esprit lorsque vous avez l'intention de compiler du code source avec Visual Studio.

J'ai mis à jour le code de manière à ce qu'il puisse utiliser Roslyn au lieu de Windows CSC.EXE s'il est installé.

Sauvegarder en tant que CompileCS.cmd et placez-le dans le même chemin que vos fichiers *.cs. Ensuite, vous pouvez simplement le compiler comme suit :

CompileCS GetDotNetVersion.cs

Ce qui compilera l'application console GetDotNetVersion, un programme pour déterminer les versions .NET installées, que j'ai publié ici.

Indice : Si vous voulez exécuter immédiatement l'application C# après la compilation, utilisez la fonction /run comme suit (vous pouvez passer des arguments de ligne de commande à la fin du fichier .cs si nécessaire, ils seront transmis au fichier .exe compilé) :

CompileCS /run GetDotNetVersion.cs [arg1] ... [arg7]

Le script vérifie l'existence des répertoires système pour .NET 2.0.x, 3.5 et 4.0.30319 - dans d'autres dossiers, je n'ai jamais vu csc.exe. Comme il effectue la vérification de la version la plus ancienne à la plus récente, la variable dotNet contient le dernier chemin existant.

Il convient de noter que

  • Microsoft stocke toutes les versions 4.x de .NET - y compris la dernière version 4.7.1 - dans le dossier 4.0.30319. Par conséquent, si une version de .NET 4.x est installée, vous la trouverez dans ce dossier.

  • Si vous avez besoin de la Version 64 bits plutôt que la version 32 bits, remplacez simplement Framework par Framework64 dans la variable d'environnement dotNetBase (2ème ligne du script). Notez que même sous Windows 64 bits, une version 32 bits du framework est généralement installée et si vous n'avez pas vraiment besoin d'avoir 64 bits, il fonctionnera parfaitement sur la plupart des PC 32 bits. Cependant, vous pouvez ajouter une vérification de l'existence du chemin et favoriser Framework64 si vous préférez cela (comme je l'ai fait pour les versions .NET).

  • Comme nous l'avons déjà dit, bien que les csc.exe existe toujours, il est limité à C# version 5 (vous recevrez cet avertissement chaque fois que vous invoquerez csc.exe). Mais pour de nombreuses applications de console peu utiles, C#5 est encore très bien. Si vous avez besoin d'une version supérieure (C#6, ..., C#9 ou plus) Pour cela, vous aurez besoin de Visual Studio ou vous pouvez visiter le site Web de Zone GitHub de Roslyn pour obtenir le code source du compilateur Roslyn.

  • Si vous faites référence à les assemblages externes (*.dll's), vous devrez mettre à jour la ligne suivante dans le code : set assemblies=-reference:.\PresentationCore.Dll,.\WindowsBase.dll - il suffit d'ajouter les dll dont vous avez besoin - la liste est séparée par des virgules. Vous devez les copier depuis le fichier dotNet chemin d'accès au répertoire de sortie (où le fichier *.exe est créé). Si aucun assemblage n'est nécessaire, il suffit de le mettre à blanc (c.-à-d. set assemblies= ).

  • Vous pourriez améliorer le script en vérifiant si une compilation est nécessaire (en comparant la date/heure du fichier *.cs et du fichier *.exe et en ne compilant que si le fichier *.cs est plus récent que le fichier *.exe). La façon dont cela peut être fait avec un lot est décrite aquí .

  • Une autre façon d'utiliser le compilateur C# est de le faire à partir de votre programme C#. Microsoft décrit cette approche aquí .

  • J'ai trouvé une bonne description de l'utilisation de fichiers de réponses avec CSC.exe . Et pour des scénarios plus complexes, vous aurez besoin de MSBUILD Cette description de la communauté des développeurs de Valve vous montre comment l'obtenir sans installer Visual Studio. Jetez-y un coup d'œil :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X