【问题标题】:Could not load file or assembly when build using ASP .Net compiler and custom build project使用 ASP .Net 编译器和自定义构建项目构建时无法加载文件或程序集
【发布时间】:2016-01-11 23:21:00
【问题描述】:

我有很多必须以特定方式构建的 MVC Web 应用程序项目的复杂解决方案。这就是我使用自定义构建项目和msbuild 实用程序在我的本地计算机上构建解决方案的原因。问题是解决方案和其中的所有项目都在Visual Studio 中成功构建。但是当我尝试通过msbuild 使用AspNetCompiler 构建解决方案时,我不断收到同样的错误:

ASPNETCOMPILER:错误 ASPCONFIG:无法加载文件或程序集“Duke.Owin.VkontakteMiddleware,版本=1.2.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。参数不正确。 (来自 HRESULT 的异常:0x80070057 (E_INVALIDARG))

当我在Visual Studio (2013) 中构建解决方案时,不会出现此错误。试图解决这个问题我已经做了以下事情:

  1. 我的解决方案项目中的所有现有引用都配置为Copy local = true
  2. 在每次构建之前,我都会清除(并删除)我项目的所有 binobj 文件夹。
  3. 我在每次构建之前多次清除了临时 Asp .Net 文件。
  4. 编译器表示找不到的所有程序集都位于包文件夹中。
  5. 尝试在每次构建之前恢复 NuGet 包:

    • 已下载NuGet
    • 通过添加 EnableNuGetPackageRestore=true 环境变量启用 NuGet 包还原
    • 在我的构建项目中添加了<Exec Command='$(ToolsDirectory)\nuget restore "$(Solution)"'/> 命令。
  6. 尝试在构建项目中手动定义引用: <ItemGroup><Reference Include="Duke.Owin.VkontakteMiddleware"><HintPath>$(PackagesFolder)\Duke.Owin.VkontakteMiddleware.1.2.0.0\lib\net45\Duke.Owin.VkontakteMiddleware.dll</HintPath></Reference></ItemGroup>

  7. 按照here 的建议,我手动编辑了无法构建的项目文件,并在编译器未找到的每个Reference 节点中添加了<Private>True</Private>

    李>
  8. 尝试手动复制丢失的 dll:<Copy SourceFiles="$(PackagesFolder)\Duke.Owin.VkontakteMiddleware.1.2.0.0\lib\net45\Duke.Owin.VkontakteMiddleware.dll" DestinationFolder="$(OutputDirectory)\bin" SkipUnchangedFiles="true" />

但是,经过以上所有,仍然没有运气。还有其他解决方案吗?

更新: 如果我将程序集添加到 GAC 它实际上会有所帮助,但是我的一些程序集是从 nuget 安装的包,并且它们没有强命名,因此我无法将它们全部添加到 GAC。当然,在 GAC 中注册所有程序集并不是一个理想的解决方案。

【问题讨论】:

  • 这是一个常见的问题,人们正在使用位于其他地方的构建环境。底线是构建机器本身必须能够访问本地机器拥有的所有 DLLS。通常这意味着构建机器要么需要安装这些 dll,要么你必须将它们包含在你的程序集中。谁在引用这个? Duke.Owin.VkontakteMiddleware 以及它在您的本地计算机上的什么位置?
  • @JohnPeters,我正在本地机器上执行构建。我没有任何构建服务器。此 dll 位于我的解决方案的 packages 文件夹中,并被其中一个项目引用。
  • 您是否尝试过在运行 msbuild 之前使用 NuGet 恢复解决方案包? nuget restore MySolution.sln
  • 如果您仍然遇到此问题,您可以使用 Fusion Log 对其进行调试。仅仅因为系统上有一个 Dll,并不意味着加载程序可以找到它或其中的其他依赖程序集。

标签: c# asp.net .net msbuild aspnet-compiler


【解决方案1】:

参见Common Issues With Automatic Package Restore,内容如下:

对于自定义构建 .proj,需要预构建 <Exec> 操作来恢复 nuget 包。这不是自动添加的。

希望对您有所帮助。

【讨论】:

  • 谢谢,我已经试过了......它没有帮助。我得到“packages.config 中列出的所有软件包都已安装。”在构建之前尝试恢复包时的消息。仍然得到同样的错误。
猜你喜欢
  • 2018-06-06
  • 2011-08-17
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多