82 votes

Code Visual Studio pour .Net Framework

J'ai de la difficulté à déterminer si et comment je peux l'utiliser Visual Studio Code pour développer et déboguer de ligne de commande/console/bibliothèques de C#.Net les programmes qui ne peuvent pas fonctionner sur .Net de Base, c'est à dire qu'ils nécessitent .Net Framework. J'ai besoin d'accéder à Oracle qui n'ont pas un .Net de Base fournisseur, mais il a Réussi .Net Framework fournisseur. J'utilise VS 2015/2017 pour cette tâche, mais souhaite passer à VS Code si je pouvais code, construire et déboguer .Net Framework cible C# programmes. J'ai essayé de recherche de Google et ne pouvait pas trouver quoi que ce soit.

85voto

Mario Figueiredo Points 351

Ok, même si je suis en retard, je vous poste cette réponse, car elle pourrait aider d'autres personnes confrontées à ce problème, qui est assez épuisant pour moi.

Première chose, la plus récente des mises à jour de Code de Visual Studio ne soutenir la construction et le débogage des projets .NET Framework, mais il est très limité:

Le C# extension prend en charge limitée complet .NET framework de débogage. Il ne peut déboguer les applications 64 bits avec portable Pdb. https://github.com/OmniSharp/omnisharp-vscode/wiki/Desktop-.NET-Framework

Comme il est dit dans OmniSharp (responsable de C# extension) github, ce projet doit être une application 64 bits avec portable Pdb.

Mais, même après avoir lu de nombreuses questions et discussions sur ce sujet, il est resté un peu floues pour moi quelles ont été les mesures nécessaires. Je vais donc exposer ici un petit guide avec les étapes que j'ai suivi et qui a fonctionné pour moi, et, espérons-le, aussi le travail pour vous.

1) Les fichiers/dossiers sont les suivants:

a) .vscode avec lancement.json et les tâches.json

b) dossier bin\Debug pour votre application exe et les assemblées, vous pouvez créer une référence à

d) l' .csproj et le Programme.fichiers cs

e) éventuellement un fichier de commandes, dont le but, je vais décrire plus tard

2) Installer le MSBuild 15

3) Dans le .csproj fichier:

  • les changements que le Projet Sdk="Microsoft.NET.Sdk" pour Projet ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

  • dans le premier Groupe de la Propriété, nous devons mettre la Typesortie pour Exe (la valeur par défaut peut être dll), retirez la TargetFramework de la propriété, en remplaçant TargetFrameworkVersion avec la valeur v4.6.1 (exemple pour .NET Framwork 4.6.1, il peut être 4.7 par exemple), et enfin l'exécution de win-x64 et windows 7-64 bits (et tout les autres que le compilateur peut se plaindre). Ce premier Groupe devrait ressembler à ceci:

 <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <RuntimeIdentifiers>win-x64;win7-x64</RuntimeIdentifiers>
 </PropertyGroup>
  • définir un autre groupe de la propriété à la suite de itens:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PlatformTarget>x64</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>portable</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>

Quelques commentaires: la condition utilisée signaux que ces propriétés s'appliquent uniquement lors de la configuration passés au compilateur est de Débogage et de la Plate-forme est "AnyCPU", vous pouvez insérer d'autres conditions avec des valeurs différentes, ou même de ne pas utiliser une condition à tous; la plupart des valeurs à l'importation sont: La PlatformTarget propriété doit être x64 et le DebugType doit être portable; le chemin de sortie est définie pour bin\Debug.

  • Comme nous ne sommes pas en utilisant le kit de développement Microsoft, nous devons inclure le Programme.cs, pour que le compilateur puisse trouver:

  <ItemGroup>
    <Compile Include="Program.cs" />
  </ItemGroup>
  • créer des références nécessaires à votre projet; exemple:

<ItemGroup>
    <Reference Include="mscorlib" />
    <Reference Include="System.Core" />
    <Reference Include="System.Windows" />
    <Reference Include="System.ServiceModel" />  
    <Reference Include="System.Net" />
    <Reference Include="System.Xml" />
    <Reference Include="System" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
</ItemGroup>
  • enfin importer les outils suivants (assurez-vous de suivre l'ordre exposés ici, les plaçant au début, par exemple, générer une erreur)

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Le tout devrait ressembler à ceci:

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <RuntimeIdentifiers>win-x64;win7-x64</RuntimeIdentifiers>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PlatformTarget>x64</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>portable</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <PlatformTarget>x64</PlatformTarget>
    <DebugType>portable</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Program.cs" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="mscorlib" />
    <Reference Include="System.Core" />
    <Reference Include="System.Windows" />
    <Reference Include="System.ServiceModel" />  
    <Reference Include="System.Net" />
    <Reference Include="System.Xml" />
    <Reference Include="System" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
  </ItemGroup>

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  
</Project>

4) dans le lancement.json:

  • Créer une nouvelle configuration(par exemple MyLauncher), dont le type doit être clr, et que des points de votre programme; la preLaunchTask sera mis à la configuration manuelle d'un"mybuild" par exemple - qui sera spécifié dans les tâches.json; un exemple de configuration est:

   "version": "0.2.0",
   "configurations": [

        {
            "name": "MyLauncher",
            "type":"clr",
            "request": "launch",
            "preLaunchTask": "mybuild",
            "program": "${workspaceFolder}/bin/Debug/<project>.exe",
            "args":[],
            "console": "internalConsole",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart"
        },
        
        { other configurations...
        }
        
    ,]
}

5) dans les tâches.json:

  • Créer une tâche "mybuild" avec les commandes pour construire votre projet
  • Nous allons utiliser le MSBuild 15 ici (ne pas utiliser le dotnet construire - au moins, il n'a pas fonctionné pour moi)
  • Vous pouvez directement le point de l' (chemin)\MSBuild.exe (ou msbuild.exe si c'est dans la variable %PATH%) fichier avec les arguments pour construire le projet. Un exemple est montré ci-dessous, notez que Ive définir la Configuration de Débogage et de la plate-forme de AnyCPU, correspondant à la condition Ive ensemble dans la .fichier csproj, notez également que les barres obliques inverses dans \"AnyCPU\" à cause de l'utilisation de guillemets.

{
    "version": "2.0.0",
    "tasks": [
    
        {
            "label": "mybuild",
            "command":"<path to msbuild>\MSBuild.exe",
            "type":"shell",
            "args":[
                "<project>.csproj",
                "/t:Build",
                "/p:Configuration=Debug",
                "/p:Platform=\"AnyCPU\""
            ]
        }

    ]
}
  • mais il y a une autre façon, en utilisant la .fichier bat; dans mon cas, le chemin d'accès à la MSBuild.exe il y avait des espaces et qui génère une erreur lors de l'exécution de la tâche, de sorte que j'ai mis le code suivant dans un .fichier bat (enregistrer le bloc-notes que le nom.chauve-souris):

    "(chemin de)\MSBuild.exe" (projet).csproj /t:Construire /p:Configuration=Debug /p:Plate-forme="AnyCPU"

Et puis définissez le "mybuild" tâche de:

        {
            "label": "mybuild",
            "command":"build.bat",
            "type":"shell",
            "args":[]
        }

Où construire.chauve-souris est le fichier de commandes que j'ai créé avec le code précédent

6) Après cela, vous pourriez avoir à enregistrer, fermer et de rouvrir les fichiers (plusieurs fois résout des problèmes pour moi)

7) mettre votre configuration dans le débogueur MyLauncher:

imprimer

8) Exécuter votre code avec le bouton de lecture vert; il va appeler le MyLaunch, la première sera de construire votre projet avec MSBuild 15, puis exécutez le fichier exe

C'était donc ça.

Espérons qu'il vous aide.

Ce serait super si vous pouviez donner de la rétroaction.

Ce qui concerne

I dont know how to use this site very well, so Ive let some references here, because it wasnt letting me:

https://github.com/OmniSharp/omnisharp-vscode/issues/813
https://github.com/OmniSharp/omnisharp-vscode/issues/1365
https://github.com/OmniSharp/omnisharp-vscode/wiki/Portable-PDBs

30voto

feO2x Points 1415

Je viens de créer une application de console simple et personnalisé le fichier csproj. Par la suite, j'ai pu joindre le OmniSharp débogueur pour un plein .NET framework d'application. Le fichier csproj ressemble à ceci:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net47</TargetFramework>
    <PlatformTarget>x64</PlatformTarget>
    <DebugType>portable</DebugType>
  </PropertyGroup>

</Project>

J'ai simplement suivi la documentation officielle: j'ai changé d' TargetFramework pour exécuter sur .NET 4.7, l' PlatformTarget à 64 bits, et l' DebugType de portable.

En outre, j'ai mis à jour le lancement.json:

{
   // Use IntelliSense to find out which attributes exist for C# debugging
   // Use hover for the description of the existing attributes
   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
   "version": "0.2.0",
   "configurations": [
        {
            "name": ".NET Launch (console)",
            "type": "clr",
            "request": "launch",
            "preLaunchTask": "build",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/bin/Debug/net47/FullNetInVsCode.exe",
            "args": [],
            "cwd": "${workspaceFolder}",
            // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window
            "console": "internalConsole",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart"
        },
        {
            "name": ".NET Attach",
            "type": "clr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ,]
}

Dans ce fichier, j'ai juste changé d' type de clr dans les deux objets JSON, et ciblée program le fichier exe.

Par la suite, je pourrais être un point de rupture et appuyez simplement sur la touche F5 pour démarrer le débogage sur le plein .NET framework:

Debugging full .NET framework in VS Code

5voto

Acid Rider Points 457

https://code.visualstudio.com/docs/languages/csharp

Citation:

Remarque: VS Code ne prend pas en charge le débogage des applications exécutées sur Desktop .NET Framework .

Il semble que l'IDE «complet» de Visual Studio reste une exigence pour .Net Framework. Dommage majeur.

0voto

Matthew Pigram Points 479

Malheureusement, il n'a pas la fonctionnalité intellisense pour le C/C++, seulement la syntaxe mise en évidence: code.visualstudio.com/docs/languages EDIT: pas de débogueur l'intégration pour le C/C++ soit. L'intégration de git est vraiment sympa si! Semble de plus en plus conçus pour les applications web, le débogueur œuvres pour node.js

Bien que cela ne spécifiez pas de C#, il va de soi que les mêmes normes s'appliquent (qui est qu'il n'y a pas de débogueur et pas de compiler des fonctionnalités).

Citation tirée de commentaires sur la première réponse à Quel est exactement le Code de Visual Studio?

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