2017-10-05 237 views
2

我試圖在Visual Studio代碼2017中創建(簡單)Windows窗體應用程序。可悲的是我無法使用完整的VS版本,所以我沒有用於創建新項目的菜單選項。在C#中使用`dotnet new`創建Windows窗體應用程序

此前,我已經通過在VSC中的終端運行dotnet new console來創建控制檯項目。但是,我無法得到這個與表單應用程序一起工作。

以下擴展名從市場安裝:

enter image description here

我試了一下:

創建控制檯應用程序,並引用using System.Windows.Forms;:但是,這需要我來引用這個命名空間:

The type or namespace 'Forms' does not exist in the namespace "System.Windows"

所以我試圖用NuGet Package Manager: Add Package命令添加這個命令,但是在這裏我找不到包System.Windows.Forms。我能想到的

最後一件事是手工添加到.csproj的文件的引用:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <OutputType>Exe</OutputType> 
    <TargetFramework>netcoreapp2.0</TargetFramework> 
    <RuntimeIdentifiers>win7-x64</RuntimeIdentifiers> 
    </PropertyGroup> 
    <ItemGroup> 
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3"/> 
    <PackageReference Include="System.Windows.Forms" HintPath = "\..\WINDOWS\Microsoft.NET\Framework\v4.0.30319"/> 
    </ItemGroup> 
</Project> 

但運行dotnet restore時,這給了警告:

warning NU1604: Project dependency System.Windows.Forms does not contain an inclusive lower bound. Include a lower bound in the dependency version to ensure consistent restore results. 
warning NU1701: Package 'System.Windows.Forms 4.0.0' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project. 

而且運行時給出了以下例外:

System.BadImageFormatException: Could not load file or assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058) ---> System.BadImageFormatException: Cannot load a reference assembly for execution. 

創建一個.cs文件,並使用csc進行編譯。這樣我可以使用Forms,但我失去了處理其他依賴關係的功能dotnet

問題

我覺得這個問題患有XY問題。我是C#和.NET的新手,所以我不確定自己在哪裏失敗,無論我嘗試做甚至是可能的。

所以我的問題是,如何使用dotnet new命令創建Windows窗體應用程序?

+0

也許這可以幫助:https://stackoverflow.com/documentation/winforms/1018/getting-started-with-winforms/11054/creating- a-simple-c-sharp-winforms-application-using-a-text-editor#t = 201710051003564647005(注意,這是SO文檔,可能會遲早消失) –

+0

@PeterB文檔已經停止使用,文章沒有任何內容這個問題 – EpicKip

+0

@PeterB這就是我用於嘗試2.但是,這打破了'Newtonsoft.Json'包的導入。這完全是一個不同的問題。由於這不會直接成爲解決方案,所以我很想知道是否可以使用'dotnet'。 – JAD

回答

2

This answer is a workaround. And a hacky workaround at that. If you can, use Visual Studio instead of this.

它花了點兒(讀:很多)令人費解,但我設法將一些信息左右一起。

創建窗體,哪個框架?

根據this answer on another question,其中有不同的框架。NET允許不同的應用程序的創建,如通過這個圖形:

.NET frameworks

對Quora的另一個post似乎第二這一點:

All native user interface technologies (Windows Presentation Foundation, Windows Forms, etc) are part of the framework, not the core.

這意味着,當我們使用的是錯誤的框架。默認情況下,dotnet new似乎使用.NET核心框架,我們可以在.csproj的文件中看到:

<TargetFramework>netcoreapp2.0</TargetFramework> 

這不是我們想要的。我們需要.NET FRAMEWORK。根據Microsoft Documentation,我們可以將其更改爲net<versionnumber>

添加依賴

的依賴System.Windows.Forms然後可以加入像這樣:

<PackageReference Include="System.Windows.Forms" HintPath = "\..\WINDOWS\Microsoft.NET\Framework\v4.0.30319"/> 

最後一件事

當編譯此,我遇到了另一個編譯錯誤:

error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create' 

可以通過添加Microsoft.CSharp使用NuGet來依賴。

的.csproj的文件,則是這樣的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <OutputType>Exe</OutputType> 
    <TargetFramework>net452</TargetFramework> 
    </PropertyGroup> 
    <ItemGroup> 
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2"/> 
    <PackageReference Include="System.Windows.Forms" HintPath="\..\WINDOWS\Microsoft.NET\Framework\v4.0.30319"/> 
    <PackageReference Include="Microsoft.CSharp" Version="4.4.0"/> 
    </ItemGroup> 
</Project> 
+0

您應該回到在Windows上使用Visual Studio。在VSCode中進行WinForms/WPF開發並不現實。在Microsoft正式支持這個新項目系統中的WinForms/WPF之前,它可能有效,但也可能會中斷。例如,'System.Windows.Forms'可能是'Reference'而不是'PackageReference'。 –

+0

@LexLi是的,我知道這是一個hacky解決方法。由於授權問題,我無法使用VS 2017,所以目前這是我做到這一點的唯一方法。我會補充答案,這不是做這件事的好方法。 – JAD

+0

如果授權是使用Visual Studio的問題,您應該發現SharpDevelop通常足夠用於小型項目。 –

相關問題