![](/img/trans.png)
[英]Is that possible to build an ASP.Net Core web application using Roslyn?
[英]Can I build ASP.NET Core web application using Microsoft Dotnet CLI?
我浏览了一些网站,发现.NET Core正在使用.NET CLI (.NET命令行界面)。 我使用.NET CLI创建了一个控制台应用程序,它运行正常
但是当我使用Yeoman创建一个ASP.NET Core Web应用程序并运行命令“dotnet restore”时,我收到以下错误:
Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01与DNXCore不兼容,版本= v5.0。
我也试过了
dotnet restore -s https://api.nuget.org/v3/index.json
但得到同样的错误。
如果我运行“dnu restore”然后它运行正常所以我的问题是我可以使用.NET CLI进行Web应用程序,还是仅限于控制台应用程序?
我已经通过了链接
https://github.com/dotnet/cli & http://dotnet.github.io/getting-started/
但是没有找到它支持ASP.NET Core web app的任何细节?
我花了一个小时的时间来玩它,我得到了“欢迎页面”。
正如我所怀疑的那样,你试图将dotnet-cli与你的dnx风格的项目一起使用,你使用了错误的nuget feed(官方的,而不是每晚的myget feed)。
对于此演示项目,只需创建一个新文件夹并运行dotnet new
。 这将创建三个文件: 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();
}
}
}
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"
]
}
注意:截至目前仅支持dnxcore
名字对象。
最后但并非最NuGet.Config
是,在我的案例中工作的NuGet.Config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<!--To inherit the global NuGet package sources remove the <clear/> line below -->
<clear />
<add key="cli-deps" value="https://dotnet.myget.org/F/cli-deps/api/v3/index.json" />
<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>
我没有使用两个默认提要(api.nuget.org和dotnet-core)取得成功,因为它无法解决一些依赖关系。 添加“cli-deps”订阅源后,所有包都已解析并且dotnet run
。 它将侦听“ http:// localhost:5000 ”端口并提供欢迎页面。
您可能会收到有关多个入口点的错误消息,这是因为您在Program.cs
和Startup.cs
中都有一个Main
方法。 只需删除Program.cs
。
这应该作为切入点。
截至目前, dotnet-cli
还不支持命令(以前在project.json
文件中定义的命令)。
对于ASP.NET Core rc1,我们使用dnx
和dnu
。
对于ASP.NET Core rc2,我们使用dotnet.
我浏览了一些网站,发现.NET Core正在使用.NET CLI(.NET命令行界面)。 我使用.NET CLI创建了一个控制台应用程序,它运行正常。
ASP.NET Core rc2也是一个控制台应用程序。 也就是说,它是一个启动ASP.NET托管层的控制台应用程序。
但是当我使用Yeoman创建一个ASP.NET Core 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 <command>
公式。
...我可以将.NET CLI用于Web应用程序[s],还是仅限于控制台应用程序?
在ASP.NET Core rc1中, dnx.exe
调用了new WebHostBuilder()
,因此我们需要使用dnx
来启动我们的Web应用程序。 在ASP.NET Core rc2中,包含我们的Web应用程序的控制台应用程序自己调用new WebHostBuilder()
,因此我们可以使用dotnet
命令行界面来启动应用程序。 所以...
dotnet
CLI用于ASP.NET Core rc1 Web应用程序,因为dnx.exe
会加载ASP.NET主机层。 现在我不知道你的确切错误是什么,但这可能会有所帮助:
基本上,您需要将适当的导入添加到project.json:
"frameworks": {
"dnxcore50": {
"imports": "portable-net451+win8"
}
}
(发布在这里: https : //github.com/aspnet/Home/issues/1265 )
这些是我的错误:
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.
我使用来自http://editor.swagger.io/#/的Swagger Code生成器生成.Net Web App
添加导入后, dotnet restore
没有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.