我有一個開放源代碼的類庫,目標爲MVC 2,3,4和5.我爲每個版本使用相同的項目文件,並使用編譯常量在項目參考如下。Windows更新MS14059 Broke MVC 3類庫項目中的參考
<ItemGroup Condition=" $(DefineConstants.Contains('MVC3')) ">
<!--<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />-->
<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.20105.1\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.Razor.1.0.20105.408\lib\net40\System.Web.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition=" $(DefineConstants.Contains('MVC4')) ">
<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.Razor.4.0.20715.0\lib\net40\System.Web.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.WebPages.4.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
</ItemGroup>
的MVC 4引用工作正常,但我無法找到一個MVC 3的配置,將建立在沒有Windows更新,也將建立與Windows更新機器的機器。由於這是一個有數十位開發人員構建的開源項目,因此無論是否安裝更新,我都需要提供一個解決方案。
我已經通過所有的以下職位信息了:
- Windows update caused MVC3 and MVC4 stop working
- System.Web.Mvc not functioning as expected after Windows Update
- ASP.NET MVC security patch to version 3.0.0.1 breaks build
- http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx
按照上述的配置,我已經嘗試從GAC refe改變繼續使用NuGet包。但是,如果我嘗試在沒有安裝此更新的計算機(包括不受我直接控制的構建服務器)上構建,那不起作用。使用原始配置不再構建在安裝了Windows Update的計算機上。在安裝了更新的計算機上使用新的GAC參考,但不在沒有安裝它的計算機上運行。
我嘗試設置複製本地屬性,但它不能正常工作,因爲我引用了4個不同版本的MVC - 在一個引用上將其設置爲true,從而再次切換其他引用。
此外,普遍的共識是您可以使用程序集綁定重定向來修復此問題。但是因爲我的項目是一個沒有自己的配置文件的類庫,你會怎麼做到的?我搜索瞭解是否有通過.NET屬性重定向綁定的方式,但我似乎無法找到任何有用的東西。我的DLL不會生成,並且會與上面鏈接的其他問題一樣發生類似的錯誤,所以將綁定重定向放入web.config文件中並不好,因爲它將物理位於另一個項目中。我嘗試添加一個app.config文件到綁定重定向到MVC 3的項目,但它沒有奏效。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="3.0.0.0-3.0.0.1" newVersion="3.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
是否有沒有任何可以用來做一個類庫引用對已在Windows Update MS14059安裝以及機器的機器MVC 3編譯上面的引用文件的任何其他選項,沒有安裝它?