如何将对本地创建的非 ASP.Net 5 dll 的引用添加到 ASP.Net 5 项目

How do you add references to locally created NON ASP.Net 5 dlls to an ASP.Net 5 project

asp.net home wiki 出现 表示可以通过 "bin" 包装器添加对本地生成的 dll(程序集)的引用。但是,project.json 文件中似乎只包含一个 bin wrapper。那么,添加对针对 .net Framework 4.6 和可移植库 .net Framework 4.6 编译的外部 class 库 dll 的引用的正确方法是什么?

顺便说一句。这些 DLL 与 ASP.Net 项目不在同一个解决方案中。

这里是 "bin syntax" 在 wiki https://github.com/aspnet/Home/wiki/Project.json-file#bin-syntax-wrapping-a-dll

中的准确位置

维基阅读:

You can create an project that, instead of compiling, references an already compiled dll and generates a package containing that dll

请注意,使用 "bin syntax",您正在创建一个使用包装的 dll 作为其输出的项目(而不是编译一些源代码以获得输出 dll)。您没有添加 dll 作为目标 project.json.

的引用

以下是当您要添加对 dll 的引用时使用 "bin syntax" 的正确方法示例:

假设我们有:

  • ASP.NET 5 个项目,项目 A
  • ClassLibraryB.dll,由其他类型的项目制作

要添加从 ProjectA 到 ClassLibraryB.dll 的引用,我们需要创建一个包装器项目来包装 ClassLibraryB.dll:

  1. 创建文件夹ClassLibraryB
  2. 在 ClassLibraryB 文件夹中创建一个 project.json,内容如下:

    {
      "frameworks": {
        "dnx451": {
          "bin": {
            "assembly": "<path to ClassLibraryB.dll>"
          }
        }
      }
    }
    
  3. ClassLibraryB 是一个 ASP.NET 5 项目,像往常一样从 ProjectA 添加一个引用到它。

将近一年后,我能够获得对包含并编译的非本地 dll 的引用。需要遵循一些遗漏和误解的步骤。

在过去一年的旅程中,我找不到任何以前命名的 DNX 实用程序版本。就在最近,我发现一篇文章说你必须 运行 DNVM 来选择 运行 时间的版本。完成后,DNX 的路径将放在路径变量上。不要忘记在此时启动一个新的 CMD(或 PowerShell)副本以获取新的环境变量。另请注意,.dnx 文件夹是一个隐藏文件夹,除非您关闭隐藏隐藏文件夹,否则不会通过 dir 命令或 windows 资源管理器显示。有关 运行ning DNVM 的更多讨论,请参阅

设置好 dnx 环境后,dnu wrap 就可以 运行。第一个问题是解决方案文件夹中必须有一个 global.json 文件。默认情况下不会创建此文件,并且它应该包含的内容的文档几乎不存在。该文件需要包含最少的信息。

{
"projects": [
    "web"
    ],
"sdk": {
    "version": "1.0.0-rc1-update1",
    "runtime": "clr",
    "architecture": "x86"
    }
}

在我的示例中,web 是解决方案中唯一项目的名称。其他的可以根据需要添加。创建后,将解决方案目录设为当前目录,然后发出 dnu wrap 命令。

dnu wrap full_path_to_an_assembly -f framework_version

老实说,我不完全确定 can/should 框架版本是什么。我使用 dnx461 因为这是我编译 dll 所针对的框架版本。 dnu wrap 操作的输出将进入解决方案文件夹下的 "wrap" 文件夹,并且 global.json 文件将更新以在项目部分中包含 wrap 项目(文件夹)。

由于在每个新解决方案中包含多个 dll 的这个过程似乎需要大量工作,因此我手动创建了 project.json 文件用于包装并将它们放置在一个全局位置(紧挨着一个正常的 .net 程序集会引用它们)。然后我将该文件夹的完整路径作为项目放在 global.json 文件中,我能够添加引用和编译。一个问题是,即使支持相对路径,但对于它们的相对路径似乎也存在一些混淆。我必须在提供二进制包装的 project.json 文件中包含二进制文件(和 pdb)的完整路径。 用于包装二进制文件的示例 project.json

  {
    "version": "1.0.0-*",
    "frameworks": {
      "dnx461": {
        "bin": {
          "assembly": "../../bin/log4net.dll"
          }
        }
      }
  }

注意上面相对路径的使用。那不能正常工作。将其更改为相关程序集的完整路径。

好消息是,一旦一切设置正确,Visual Studio 中 project.json 的依赖项部分的智能感知将在您输入时指示 dll 的名称。