如何在 asp.net vNext 中使用现有代码

How to use existing code in asp.net vNext

尝试使用 asp.net vNext。

假设我有 MyCode.dll 程序集,其中包含一些我拥有并想在我的 be vNext 项目中使用的代码。如何引用现有的 .net 4.5 程序集?

我已经将它打包到 nuget 包中,然后使用本地提要将它添加到 vNext 项目中。还使用 kpm restore 实际下载了包。

看起来包添加成功了,但是 MyCode.dll 中没有可用的代码,intelliSence 和 build throw 根本没有使用它 Type or namespace chould not be found

我可以将代码从 MyCode.dll 移动到 asp.net 5 class 库,但我需要重用其他项目也使用的现有 dll,例如旧版本的 asp.net等

如果您正在使用 latest VS 2015 CTP,最简单的方法是将您现有的 .NET 4.5 项目添加到您的 ASP.NET 5.0 解决方案并使用 "Add Refernece" 对话框引用您的 4.5图书馆。这将使您的 project.json 文件看起来像这样:

"frameworks": {
    "aspnet50": {
        "dependencies": {
            "MyClassLib": "1.0.0-*"
        }
    },
    "aspnetcore50": { }
},

您只能使用 4.5 库,而 运行 完整 ASP.NET 5.0 运行时,因此请确保项目设置未设置为针对 ASP.NET 5.0 核心运行时。如果您希望您的库成为 cross-platform 并以核心运行时为目标,您需要将其重建为 ASP.NET 5.0 库。

我的解决方法是添加一个本地 nuget 服务器并正确规范、打包程序集并将其推送到 nuget 服务器,这样您就可以针对 .NET 的多个版本,例如 aspnetcore5、aspnet5 和 net45。在创建程序集的规范文件时,不要忘记为每个版本包含它们相应的依赖项。

要创建本地服务器,请参阅说明 here

请参阅规范示例。

<dependencies>
  <group targetFramework="net45">
    <dependency id="Newtonsoft.Json" version="6.0.6" />
  </group>
  <group targetFramework="aspnet50">
    <dependency id="Newtonsoft.Json" version="6.0.6" />
    <dependency id="System" version="4.0.0.0" />
    <dependency id="System.Core" version="4.0.0.0" />
    <dependency id="Microsoft.CSharp" version="4.0.0.0" />
    <dependency id="mscorlib" version="4.0.0.0" />
  </group>
  <group targetFramework="aspnetcore50">
    <dependency id="Newtonsoft.Json" version="6.0.6" />
    <dependency id="System.Runtime" version="4.0.20-beta-22231" />
    <dependency id="System.Collections" version="4.0.10-beta-22516" />
  </group>
</dependencies>

当我将 "older libraries" 添加到新的 ASP.NET 时,我得到了内部服务器 500。IISExpress 中有一些错误。 特别是 System.Reflection.ReflectionTypeLoadException:无法加载一种或多种请求的类型。检索 LoaderExceptions 属性 以获取更多信息。

经过研究和使用 DNX 进行一些内部调试,我们终于找到了失败的根源。

显示名称为 'System.Web.Mvc' 的程序集未能加载到 ID 为 1 的 AppDomain 的 'Anonymous' 绑定上下文中。失败原因 是:System.IO.FileNotFoundException:无法加载文件或程序集 System.Web.Mvc,版本=5.2.3.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统不能 找到指定的文件。

因为 "my older" 库使用的是较旧的 MVC。我在提交以下命令后更新了我的库:

安装包Microsoft.AspNet.WebApi.Core-版本 5.2.3

得出以下结论:

如果您尝试在 ASP.NET vNext 中使用的库依赖于或使用 MVC 5.2.3 或更早版本,您将无法在新框架内使用。