[英]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语法”的正确方法的示例:
假设我们有:
要将ProjectA中的引用添加到ClassLibraryB.dll,我们需要创建一个包装ClassLibraryB.dll的包装器项目:
在ClassLibraryB文件夹中创建一个project.json,其内容为:
{ "frameworks": { "dnx451": { "bin": { "assembly": "<path to ClassLibraryB.dll>" } } } }
差不多一年后,我能够获得一个非本地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.