.Net将引用程序集的错误版本添加到.csproj文件中

时间:2017-07-12 02:55:43

标签: dll .net-assembly gac

我们正在开发一个DLL,称之为&#34; My.dll&#34;,它需要引用旧版本的.Net Framework DLL(早于应用程序目标)。< / p>

那是:

应用程序(My.dll&#39; s)目标框架= &#34; .Net Framework 4&#34;

我们需要引用 System.Web.Mvc v3.0.0.0 (与外部主机应用程序兼容)

设置应用程序&#39; (My.dll&#39; s)目标框架除4之外的任何东西都会破坏代码。

因此,我们只是将 System.Web.Mvc v3.0.0.0 DLL复制到项目&#39; lib&#39;文件夹并直接添加对该程序集的引用。

Visual Studio显示的引用的MVC程序集的版本是&#34; v3.0.0.0&#34; ...太棒了!

enter image description here

但是,在添加引用之后,项目文件最终会引用&#34; v4.0.0.1&#34; ... WTF!?

SELECT GROUP_CONCAT( `choice` ), `choice_id`, `is_right_choice`
FROM Question_choices
GROUP BY `choice`

令人困惑的是,编译后的My.Dll的清单引用了v3.0.0.0:

enter image description here

然后,当我们部署应用程序时,我们发现(参见下面的Fusion Log Viewer)它从GAC加载System.Web.Mvc并使用v4.0.0.0,即使v3.0.0.0存在于GAC

断开连接发生在哪里?

在编写.CSPROJ文件中的条目时,Visual Studio是否忽略了我给出的版本,只是选择了与应用程序的目标框架相匹配的版本

Fusion日志查看器日志

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>lib\System.Web.Mvc.dll</HintPath>
</Reference>

1 个答案:

答案 0 :(得分:0)

我怀疑Visual Studio正在显示您正在引用的dll的正确版本,但在csproj中有一个来自GAC或其他地方的版本。

这对我有用:

  1. 转到csproj(在Visual Studio中)。
  2. 参考集&#34;特定版本&#34;真实。
  3. 全部保存。
  4. 在同一参考集&#34;特定版本&#34;回到假。 (如果这就是你所需要的,那就留下它。)
  5. 在CsProj中,您现在应该拥有正确的版本。 最后,您可以手动编辑csproj文件并设置正确的版本。