C# 我可以使用Microsoft Dotnet CLI构建ASP.NET核心web应用程序吗?
我浏览了一些网站,发现.NET Core正在使用.NET CLI(.NET命令行界面)。我已经使用.NET CLI创建了一个控制台应用程序,它运行良好 但是,当我使用Yeoman创建ASP.NET核心web应用程序并运行命令“dotnet restore”时,我遇到以下错误: Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01与DNXCore不兼容,版本=v5.0 我也试过了 dotnet还原-s 但是得到同样的错误 如果我运行“dnu restore”,那么它工作正常,所以我的问题是,我是否也可以将.NET CLI用于web应用程序,还是仅限于控制台应用程序? 我已经浏览了链接 &C# 我可以使用Microsoft Dotnet CLI构建ASP.NET核心web应用程序吗?,c#,asp.net-core,.net-core,asp.net-core-1.0,dotnet-cli,C#,Asp.net Core,.net Core,Asp.net Core 1.0,Dotnet Cli,我浏览了一些网站,发现.NET Core正在使用.NET CLI(.NET命令行界面)。我已经使用.NET CLI创建了一个控制台应用程序,它运行良好 但是,当我使用Yeoman创建ASP.NET核心web应用程序并运行命令“dotnet restore”时,我遇到以下错误: Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01与DNXCore不兼容,版本=v5.0 我也试过了 dotnet还原-s 但是得到同样的错误 如果我运行“dnu res
但是没有找到任何关于它是否支持ASP.NET核心web应用程序的详细信息?我花了一个小时来玩弄它,并用它运行了“欢迎页面” 正如我所怀疑的,您试图在dnx样式的项目中使用dotnet cli,但使用了错误的nuget提要(官方的,而不是每晚的myget提要) 对于这个演示项目,只需创建一个新文件夹并运行
dotnetnew
。这将创建三个文件:NuGet.Config
、project.json
和Program.cs
。您可以删除后面的一个,只需从下面创建一个Startup.cs
Startup.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
namespace AspNetCoreCliDemo
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app)
{
app.UseIISPlatformHandler();
app.UseWelcomePage();
}
// This doesn't work right now, as it can't resolve WebApplication type
//public static void Main(string[] args) => WebApplication.Run<Startup>(args);
// Entry point for the application.
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseDefaultConfiguration(args)
.UseServer("Microsoft.AspNetCore.Server.Kestrel")
.UseIISPlatformHandlerUrl()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
注意:目前只支持dnxcore
名字对象
最后但并非最不重要的一点是,在我的案例中有效的NuGet.Config
:
“导入并服务欢迎页面
您可能会收到关于有多个入口点的错误消息,这是因为您在Program.cs
和Startup.cs
中都有Main
方法。只需删除Program.cs
这应该作为一个切入点
dotnetcli
目前还不支持命令(以前在project.json
文件中定义的命令)。简短回答
对于ASP.NET核心rc1,我们使用dnx
和dnu
对于ASP.NET核心rc2,我们使用dotnet.
更长的答案
我浏览了一些网站,发现.NET Core正在使用.NET CLI(.NET命令行界面)。我已经使用.NET CLI创建了一个控制台应用程序,它工作正常
ASP.NET Core rc2也是一个控制台应用程序。也就是说,它是一个启动ASP.NET托管层的控制台应用程序
但是,当我使用Yeoman创建ASP.NET核心web应用程序并运行命令“dotnet restore”时,我得到以下错误
我的感觉是,您正在运行以下命令:
yo aspnet
? What type of application do you want to create? Web Application
? What's the name of your ASP.NET application? MyApp
这将创建一个ASP.NET Core rc1项目。您可以通过查看结果project.json文件依赖项来看到这一点。它们都是rc1 final
。结果:您不能使用dotnet
命令行来构建它们。您仍然必须使用dnu build
和dnx
公式
…我可以将.NET CLI也用于web应用程序,还是仅限于控制台应用程序
在ASP.NET Core rc1中,dnx.exe
调用了new WebHostBuilder()
,因此我们需要使用dnx
来启动我们的web应用程序。在ASP.NET Core rc2中,包含我们的web应用程序的控制台应用程序自己调用了new WebHostBuilder()
,因此我们可以使用dotnet
命令行界面启动应用程序。因此
- 否您不能对ASP.NET核心rc1 Web应用程序使用
dotnet
CLI,因为dnx.exe
加载ASP.NET宿主层
- 是的,您可以将其用于ASP.NET核心rc2 Web应用程序,因为您的控制台应用程序本身加载ASP.NET托管层
现在我不知道您的确切错误是什么,但这可能会有所帮助:
基本上,您需要向project.json添加适当的导入:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"NETStandard.Library": "1.0.0-rc2-*",
"Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-*",
"Microsoft.AspNetCore.IISPlatformHandler": "1.0.0-rc2-*",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-*"
},
"frameworks": {
"dnxcore50": { }
},
"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
"frameworks": {
"dnxcore50": {
"imports": "portable-net451+win8"
}
}
(张贴于此:)
这些是我的错误:
Errors in /webserver/project.json
Package Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01 is not compatible with dnxcore50 (DNXCore,Version=v5.0). Package Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01 supports:
- net45 (.NETFramework,Version=v4.5)
- portable-net45+win8 (.NETPortable,Version=v0.0,Profile=Profile7)
Package Microsoft.CodeAnalysis.Common 1.1.0-rc1-20151109-01 is not compatible with dnxcore50 (DNXCore,Version=v5.0). Package Microsoft.CodeAnalysis.Common 1.1.0-rc1-20151109-01 supports:
- net45 (.NETFramework,Version=v4.5)
- portable-net45+win8 (.NETPortable,Version=v0.0,Profile=Profile7)
One or more packages are incompatible with DNXCore,Version=v5.0.
我使用来自的Swagger代码生成器生成了.Net Web应用程序
添加导入后,dotnet restore
工作正常。您是否也通过dotnet cli(通过dotnet new
命令)创建了项目?在project.json
中,您的依赖项似乎仍然引用rc1。当我使用“dotnet new”时,dotnet cli仅适用于rc2夜间构建(尚未正式的rc2构建)"然后它正在创建一个C#console应用程序。我没有找到任何使用CLI创建ASP.NET Core web应用程序的命令,因此对于scaffolding,我使用yeoman,然后使用CLI进行恢复和构建。但是您可以比较project.json
文件,并比较不同的依赖项。dotnet CLI仍处于早期阶段,而ASP.NET Core 1.0在完全迁移到它的过程中(因此ASP.NET Core 1.0 RC2版本的延迟,预计将在1月份发布)。在官方的nuget 3提要上只有官方版本(RC1)。这可能是因为您需要更新版本的依赖项。上有一个myget提要,其中包含更新版本的Microsoft.CodeAnalysis.CSharp和新的Microsoft.AspNetCore.Mvc.*Packages感谢您的回答。但是它包含很多复杂性和解决方法。如果它有这么多复杂性,为什么我要选择CLI.I a使用yeoman进行脚手架搭建以及dnu和dnx命令。那么,使用CLI创建ASP.NET核心Web应用程序的脚手架工具或命令是什么。@Banketeshvar Narayan使用CLI在ASP.NET上有点像是在跳炮。这是一个非常大的方向变化,仍在大规模开发中,没有路线图。脚手架工具还没有exist for ASP.NET Core使用CLI…RC2仅通过夜间版本提供,尚未准备好供beta/公共使用。感谢@Phasiq提供您的inf