使用ASP .Net编译器和自定义生成项目进行构建时无法加载文件或程序集

时间:2016-01-11 23:21:00

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

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

  

ASPNETCOMPILER:错误ASPCONFIG:无法加载文件或程序集' Duke.Owin.VkontakteMiddleware,Version = 1.2.0.0,Culture = neutral,PublicKeyToken = null'或其中一个依赖项。参数不正确。 (HRESULT异常:0x80070057(E_INVALIDARG))

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

  1. 我的解决方案项目中的所有现有参考都配置为Copy local = true
  2. 在每次构建之前,我清除(并删除)项目的所有binobj文件夹。
  3. 我在每次构建之前多次清除了Temporary 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,我手动编辑了无法构建的项目文件,并在每个<Private>True</Private>节点中添加了Reference,但未找到编译器。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

希望有所帮助。

相关问题