我有许多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)中构建解决方案时,不会出现此错误。试图解决问题我已经做了以下事情:
Copy local = true
bin
和obj
文件夹。尝试在每次构建之前恢复NuGet包:
EnableNuGetPackageRestore=true
环境变量<Exec Command='$(ToolsDirectory)\nuget restore "$(Solution)"'/>
命令。尝试在构建项目中手动定义引用:
<ItemGroup><Reference Include="Duke.Owin.VkontakteMiddleware"><HintPath>$(PackagesFolder)\Duke.Owin.VkontakteMiddleware.1.2.0.0\lib\net45\Duke.Owin.VkontakteMiddleware.dll</HintPath></Reference></ItemGroup>
根据建议here,我手动编辑了无法构建的项目文件,并在每个<Private>True</Private>
节点中添加了Reference
,但未找到编译器。
尝试手动复制错过的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中注册所有程序集并不是一个理想的解决方案。
答案 0 :(得分:1)
请参阅Common Issues With Automatic Package Restore,内容如下:
对于自定义构建.proj,需要一个用于恢复nuget包的预构建
<Exec>
操作。这不会自动添加。
希望有所帮助。