簡體   English   中英

在MVC 4項目中訪問MVC5 DLL

[英]Accessing MVC5 DLL in MVC 4 project

我創建了一個在MVC5中的組件( DLL ),DLL也包含編譯視圖。當我在MVC5項目中訪問此DLL時,我可以調用該MVC5 DLL的控制器,但是當我在MVC4中訪問它時項目,我收到404錯誤。

是否可以在MVC 4項目中訪問MVC5 DLL?

直接是不可能的,因為dll不向后兼容。

但是,由於您具有MVC5 dll,並且想在MVC4上運行的舊項目中使用它們。

然后,您需要將您的項目升級到MVC5,以便使用dll的

您可以在提供的鏈接上找到完整的參考:

如何將ASP.NET MVC 4和Web API項目升級到ASP.NET MVC 5和Web API 2

升級后,您可以在項目中使用這些dll。

一種可能的解決方法是將條件添加到.csproj文件中,以便可以為MVC 4編譯一個版本,為MVC 5編譯一個版本。這涉及到一點點,但是如果要同時支持MVC的兩個版本,則可以選擇。

<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>
<ItemGroup Condition=" $(DefineConstants.Contains('MVC5')) ">
    <Reference Include="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\System.Web.Mvc.dll</HintPath>
    </Reference>
    <Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.Razor.3.0.0\lib\net45\System.Web.Razor.dll</HintPath>
    </Reference>
    <Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.dll</HintPath>
    </Reference>
    <Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
    </Reference>
</ItemGroup>

然后,在編譯之前,我們在DefineConstants中設置MVC4或MVC5(可在項目屬性的“構建”選項卡上訪問)。

<DefineConstants Condition="  '$(DefineConstants)' == '' ">MVC4;NET40;</DefineConstants>

請注意,也可以通過構建腳本來更改此設置。

我們在MvcSiteMapProvider項目上使用了此技術,並且效果很好。 不幸的是,NuGet還不支持MVC的多個版本,因此我們一直在為MVC的每個主要版本制作一個軟件包。

將多個版本的MVC NuGet軟件包放入項目中也有些棘手。 我們只是創建一個單獨的臨時項目,安裝特定的MVC主要版本,然后復制兩個的NuGet \\packages\\中的文件和條目packages.config到這個項目(沿一側的一個或多個不同版本的MVC)。 以這種方式放置它們可以確保將所有版本的MVC下載到CI服務器上。 盡管在切換MVC版本時Visual Studio不會正確顯示依賴項,但構建項目的效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM