繁体   English   中英

如何将对本地创建的NON 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包装器。 那么,添加对.net框架4.6和可移植库.net框架4.6编译的外部类库dll的引用的正确方法是什么?

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

以下是wiki中“bin语法”的准确位置https://github.com/aspnet/Home/wiki/Project.json-file#bin-syntax-wrapping-a-dll

维基读到:

您可以创建一个项目,而不是编译,引用已编译的dll并生成包含该dll的包

请注意,使用“bin语法”,您将创建一个使用包装的dll作为其输出的项目(而不是编译一些源代码以获取输出dll)。 您没有添加dll作为目标project.json的引用。

下面是当您想要添加对dll的引用时使用“bin语法”的正确方法的示例:

假设我们有:

  • ASP.NET 5项目,ProjectA
  • 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资源管理器中显示。 有关运行DNVM的更多讨论,请参阅Stack Overflow问题“DNX不起作用”

一旦设置了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

说实话,我不完全确定框架版本可以/应该进行什么。 我使用dnx461,因为那是我编译dll的框架版本。 dnu换行操作的输出将进入解决方案文件夹下的“wrap”文件夹,并且global.json文件将更新为包含项目部分中的换行项目(文件夹)。

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

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

注意使用上面的相对路径。 这不能正常工作。 将其更改为相关装配的完整路径。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM