![](/img/trans.png)
[英]ASP.NET Core 2 Web Application Reference to .NET Standard Library
[英]ASP net core MVC - Start Web application in a library
我需要從控制台項目啟動一個使用 Kestrel 自行托管的 Web 應用程序。 Web 應用程序位於庫中。 我有兩個項目的解決方案,即:
App.Console 調用 APP.WebSite 單例方法來啟動 Web 應用程序。 解決方案可以編譯,但是當網站啟動時,我收到了 50 多個錯誤,如以下屏幕截圖:
如果我將 APP.WebSite 修改為控制台應用程序,它會定期啟動而不會出現錯誤。 我錯在哪里?
EDIT1:啟動控制台應用程序:
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Test.Start.StartApp();
Console.ReadKey();
}
StartApp 靜態方法:
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();
}
在 Web/wwwroot 中有所有客戶端文件
EDIT2:解決方案文件夾:
我能夠使用 .NET Core 3.1.1 實現您想要的功能,但是我必須做一些事情。
首先你的文件夾結構是錯誤的。
正確的文件夾結構是這樣的:
請注意,我將 wwwroot 文件夾移動到名為 Web 的文件夾中...只有 wwwroot
第二將asp.net核心網站“轉換”為類庫的正確方法在這里:
所以基本上創建一個asp.net核心Web應用程序項目然后右鍵單擊屬性並更改輸出類型。
第三次從類庫項目開始如果您從 .NET Core 類庫項目開始,那么您可以打開 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>
因此,基本上更改 Sdk、OutputType、EnableDefaultContentItems 並添加一個 ItemGroup 以強制復制 wwwroot 的所有內容文件。
最后你的代碼應該是這樣的:
public static void StartApp(string environment)//notice the new parameter
{
var s = Directory.GetCurrentDirectory();
//activate web hosting here
var host = new WebHostBuilder()
.UseEnvironment(environment)//set the environment for debugging mostly
.UseKestrel(o =>
{
o.AllowSynchronousIO = true;
o.ListenAnyIP(5000);
//o.ListenLocalhost(5000);
})
.UseWebRoot(s + "\\Web\\wwwroot")//notice the correct path to client files
//.UseContentRoot(s+"/Web/wwwroot")
.UseStartup<StartUpWeb>()
.Build();
host.Start();
}
您在控制台應用程序中的入口點:
static void Main(string[] args)
{
System.Console.WriteLine("Hello World!");
Test.Start.StartApp("Development");//pass the environment for debugging
System.Console.ReadKey();
}
我對您的代碼進行了一些更改。
指定環境調試和加載配置文件等....
還要指定 WebRoot 來查找客戶端文件和視圖之類的東西(即使它們被編譯,它仍然需要一個 webroot)。
這是結果萬歲!!
你說對了! 問題是這個配置行:
<Project Sdk="Microsoft.NET.Sdk.Web">
謝謝喬納森
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.