Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP net核心MVC-在库中启动Web应用程序_C#_Asp.net Core Mvc - Fatal编程技术网

C# ASP net核心MVC-在库中启动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修改为控制台应用程序,它会正常启动,不会出现错误。

我需要从控制台项目启动一个web应用程序,使用Kestrel自托管。web应用程序位于库中。 我有两个项目的解决方案,即:

  • --APP.Console.exe(dotnet core 3.1控制台应用程序)
  • --APP.WebSite(一个dotnet核心3.1类库)
控制台调用App.WebSite单例方法来启动web应用。 解决方案可以编译,但当网站启动时,我收到了50多个错误,如下面的scren快照:

如果我将APP.WebSite修改为控制台应用程序,它会正常启动,不会出现错误。 我错在哪里

EDIT1: 启动控制台应用程序:

    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文件夹中。我需要分开的桌面应用程序,控制台应用程序和网络应用程序。整个应用程序是它们的混合体。