将 ASP.NET Web Api 构建到不同的输出目录

Posted

技术标签:

【中文标题】将 ASP.NET Web Api 构建到不同的输出目录【英文标题】:Build ASP.NET Web Api to a different output directory 【发布时间】:2020-05-29 21:38:56 【问题描述】:

我有一个 ASP.NET web api 项目,该 api 与其他 dll 有很多依赖关系,因此我们将所有 dll 放在特定文件夹中。如果我将 web api 的输出路径指向该输出目录并在 IISExpress 中执行,则会出现以下错误

解析器错误消息:无法找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”。

如果我们看到错误的文件位置,它仍然指向 WebAPI_SourceCode_Directory\web.config 而不是我的输出文件夹。但输出文件夹有 web.config 文件。如何使用 IISExpress 从输出文件夹运行 Web 应用程序

【问题讨论】:

您是否更改了 Visual Studio、Project > Properties 的输出目录? 是的克林特,我已经改了项目->属性->构建->输出路径 试试下面告诉我 【参考方案1】:

由于 IIS 安全限制,不建议更改 asp.net 应用程序的输出目录。

但是您仍然可以通过适当更改配置文件来破解它,请参阅here

根据MSDN 文章,当您编译 Web 应用程序时,编译后的代码将放置在 Temporary ASP.NET Files 文件夹中

要找到这个 Temporary ASP.NET Files 文件夹,请查看我的帖子 here

【讨论】:

我尝试探测它不起作用,我们可以仅在我的 dll 位于 bin 的子文件夹中时使用探测吗? 探测后你是否也在<Assemblies>下添加了相关程序集? 不,我没有具体说明。但我从 Microsoft 文档页面“privatePath 中指定的目录必须是应用程序基目录的子目录”获得此信息。网址:docs.microsoft.com/en-us/dotnet/framework/configure-apps/… 这是否意味着 dll 不能位于子文件夹之外? @BaalaSrinivasK,是的,没错。正如您在其他 SO 帖子 上看到的那样,您似乎还需要在探测步骤之后添加相关程序集 @BaalaSrinivasK ,只是跟进,如果您认为此答案对您有所帮助,如果您可以标记为已解决,那就太好了,如果没有,您可以让我知道是否有任何我可以添加以改进它:)【参考方案2】:

不要使用 IIS express 进行开发,而是使用适当的 IIS。这样,您将从一开始就解决任何生产问题。

无论你的 API 是否有很多 dll 依赖项,都没有区别。 API 需要知道从哪里获取它们,我不会更改默认行为。当您构建项目时,它们将与所有其他依赖项一样位于 bin 文件夹中。

要在本地环境中部署 API,请使用 Publish 方法到本地文件夹,然后构建指向该文件夹的 IIS 应用程序。

这就是您需要做的所有事情,那么为什么要把事情复杂化呢?您仍然可以在调试模式下发布,您仍然可以将您的 Visual Studio 连接到它并正确调试它。从字面上看,与默认的做事方式作斗争是零需求。

【讨论】:

以上是关于将 ASP.NET Web Api 构建到不同的输出目录的主要内容,如果未能解决你的问题,请参考以下文章

Web API1.1 ASP.NET Web API入门

ASP.NET Web API 登录方法

Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

将 asp.net core web api 部署到 aws elastic beanstalk 时出现错误 404

用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务