C# ASP net核心MVC-在库中启动Web应用程序
我需要从控制台项目启动一个web应用程序,使用Kestrel自托管。web应用程序位于库中。 我有两个项目的解决方案,即:C# ASP net核心MVC-在库中启动Web应用程序,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我需要从控制台项目启动一个web应用程序,使用Kestrel自托管。web应用程序位于库中。 我有两个项目的解决方案,即: --APP.Console.exe(dotnet core 3.1控制台应用程序) --APP.WebSite(一个dotnet核心3.1类库) 控制台调用App.WebSite单例方法来启动web应用。 解决方案可以编译,但当网站启动时,我收到了50多个错误,如下面的scren快照: 如果我将APP.WebSite修改为控制台应用程序,它会正常启动,不会出现错误。
- --APP.Console.exe(dotnet core 3.1控制台应用程序)
- --APP.WebSite(一个dotnet核心3.1类库)
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Test.Start.StartApp();
Console.ReadKey();
}
STARTAP静态法:
public static void StartApp()
{
var s = Directory.GetCurrentDirectory();
//activate web hosting here
var host = new WebHostBuilder()
.UseKestrel(o =>
{
o.AllowSynchronousIO = true;
o.ListenAnyIP(5000);
//o.ListenLocalhost(5000);
})
.UseWebRoot(s + "/Web/wwwroot")
//.UseContentRoot(s+"/Web/wwwroot")
.UseStartup<StartUpWeb>()
.Build();
host.Start();
}
public static void StartApp()
{
var s=Directory.GetCurrentDirectory();
//在此处激活web托管
var host=new WebHostBuilder()
.UseKestrel(o=>
{
o、 AllowSynchronousIO=true;
o、 李斯特(5000);
//o、 ListenLocalhost(5000);
})
.UseWebRoot(s+“/Web/wwwroot”)
//.UseContentRoot(s+“/Web/wwwroot”)
.UseStartup()
.Build();
host.Start();
}
在Web/wwwroot中,存在所有客户端文件
EDIT2:解决方案文件夹:
我能够使用.NET Core 3.1.1实现您想要的功能,但我必须做一些事情 首先您的文件夹结构错误 正确的文件夹结构如下所示: 请注意,我已将wwwroot文件夹移动到名为Web的文件夹中。。。只有wwwroot 其次将asp.net核心网站“转换”为类库的正确方法如下: 因此,基本上创建一个asp.net核心web应用程序项目,然后右键单击属性并更改输出类型 第三个从类库项目开始 如果您是从.NET核心类库项目开始,则可以打开csproj文件并更改一些内容: 这就是我的csproj文件现在的样子:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<ApplicationIcon />
<OutputType>Library</OutputType>
<StartupObject />
<EnableDefaultContentItems>true</EnableDefaultContentItems>
</PropertyGroup>
<ItemGroup>
<Content Include="Web\wwwroot\**">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
我对你的代码做了一些修改
指定调试和加载配置文件等的环境
还指定WebRoot以查找客户端文件和视图之类的内容(即使它们已编译,但仍需要WebRoot)
这是结果,哇
我能够使用.NET Core 3.1.1实现您想要的功能,但我必须做一些事情 首先您的文件夹结构错误 正确的文件夹结构如下所示: 请注意,我已将wwwroot文件夹移动到名为Web的文件夹中。。。只有wwwroot 其次将asp.net核心网站“转换”为类库的正确方法如下: 因此,基本上创建一个asp.net核心web应用程序项目,然后右键单击属性并更改输出类型 第三个从类库项目开始 如果您是从.NET核心类库项目开始,则可以打开csproj文件并更改一些内容: 这就是我的csproj文件现在的样子:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<ApplicationIcon />
<OutputType>Library</OutputType>
<StartupObject />
<EnableDefaultContentItems>true</EnableDefaultContentItems>
</PropertyGroup>
<ItemGroup>
<Content Include="Web\wwwroot\**">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
我对你的代码做了一些修改
指定调试和加载配置文件等的环境
还指定WebRoot以查找客户端文件和视图之类的内容(即使它们已编译,但仍需要WebRoot)
这是结果,哇
你明白了!
问题就在于此配置行:
<Project Sdk="Microsoft.NET.Sdk.Web">
谢谢你,乔纳森,你明白了!
问题就在于此配置行:
<Project Sdk="Microsoft.NET.Sdk.Web">
谢谢Jonathan我们需要查看所有代码…我们需要能够重现问题。此外,启动.NET核心网站通常需要运行dotnet命令。但这取决于你的代码看起来像什么,所以我们需要知道你是如何发布这个应用程序的,以及你是如何从控制台“启动”这个应用程序的。不,不是发布,只是调试。代码非常简单。我将尝试编辑该问题。它可能与视图的位置、web根目录的位置以及其他内容有关。只是一个问题,如果网站项目为您工作,那么您为什么需要第二个项目控制台?@MartinStaufcik,我支持id,但错误应该完全不同。此外,视图被放置到Correct文件夹中。我需要分开的桌面应用程序,控制台应用程序和网络应用程序。整个应用程序是它们的混合体。我们需要看到所有的代码…我们需要能够重现问题。此外,启动.NET核心网站通常需要运行dotnet命令。但这取决于你的代码看起来像什么,所以我们需要知道你是如何发布这个应用程序的,以及你是如何从控制台“启动”这个应用程序的。不,不是发布,只是调试。代码非常简单。我将尝试编辑该问题。它可能与视图的位置、web根目录的位置以及其他内容有关。只是一个问题,如果网站项目为您工作,那么您为什么需要第二个项目控制台?@MartinStaufcik,我支持id,但错误应该完全不同。此外,视图被放置到Correct文件夹中。我需要分开的桌面应用程序,控制台应用程序和网络应用程序。整个应用程序是它们的混合体。