如何在.NET Core中重定向探测程序集?

时间:2018-04-25 06:38:03

标签: c# visual-studio iis .net-core asp.net-core-mvc

我有一个位于App文件夹中的ASP.NET Core MVC应用程序。而且我没有使用Kestrel或IIS Express来运行它。相反,我们有一个基础架构直接在IIS中托管App文件夹,并做更多的事情来使我们的开发环境与我们的生产环境(DevOps)非常相似。

事情很好。当我构建时,输出进入bin\Debug\netcoreapp2.0文件夹,我们有一个Web.config文件,我们在其中配置了AspNetCoreModule以从该路径加载条目DLL。

现在我想使用ClosedXML,它依赖于System.Drawing.Common库。

当我构建并测试我的应用程序时,我有这个错误:

  

应用程序依赖项清单中指定的程序集   (App.deps.json)未找到:
      包:'System.Drawing.Common',版本:'4.5.0-preview1-25914-04'
      路径:'runtimes / win / lib / netcoreapp2.0 / System.Drawing.Common.dll'

关键是,我有一个托管应用程序的bin\Debug\netcoreapp2.0文件夹,我可以确认System.Drawing.Common已经复制到那里。但似乎MSBuild不会将其复制到预期的bin\Debug\netcoreapp2.0\runtimes\win\lib\netcoreapp2.0文件夹。

我可以将请求的库复制到给定的文件夹,即runtime/win/lib/netcoreapp2.0,该应用程序可以正常工作。

我可以为App.runtimeconfig.json添加其他探测路径。

我可以将App.deps.json中此库的搜索路径更改为同一目录。

但这些都是手动完成的。

如何让构建过程将依赖项复制到正确的位置?

1 个答案:

答案 0 :(得分:1)

您可以使用Publish命令创建输出目录。要么从命令行使用dotnet publish,要么在Visual Studio的解决方案资源管理器中,右键单击您的项目 - >发布。

当您只是Build您的应用时,来自NuGet包的从属程序集将保留在NuGet缓存文件夹中。当您使用F5 / dotnet运行您的应用程序时,它们将从NuGet缓存文件夹中加载。但是,如果您希望应用程序文件夹准备好在VS / dotnet运行之外的其他环境中运行,那么您应该发布您的应用程序。