【问题标题】:Using .NET Core CLI, add a reference to a local DLL when targeting the full framework使用 .NET Core CLI,在面向完整框架时添加对本地 DLL 的引用
【发布时间】:2016-10-05 23:38:43
【问题描述】:

我想知道在使用 .NET Core 工具构建新的控制台应用程序并且仅针对 .NET 4.5.1 框架时,如何引用本地未签名的 CLR 4.0 程序集。

我在 Windows 10 机器上做了以下操作:

  1. 使用以下代码创建一个新的 MyLibrary.cs:
using System;
namespace MyNamespace
{
  public class MyLibrary
  {
    public static void SayHi()
    {
      Console.WriteLine("Hi");
    }
  }
}
  1. csc /t:library MyLibrary.cs编译以上代码。

  2. 创建一个新文件夹和一个 .NET Core 项目。

mkdir MyConsoleApp
cd MyConsoleApp
dotnet new
  1. 编辑自动生成的 project.json 文件以面向 .NET 4.5.1。
{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "net451" : { } 
  }
}
  1. 测试项目是否构建和运行。确实如此。
dotnet restore
dotnet build
bin\Debug\net451\MyConsoleApp.exe
  1. 编辑 Program.cs 以调用 MyLibrary.dll 中的代码。
public static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
    MyNamespace.MyLibrary.SayHi();
}

这就是我卡住的地方。

我应该在哪里放置我的 DLL 以及在 project.json 中放置什么,以便我可以在我的程序集中调用代码?

【问题讨论】:

标签: .net-core


【解决方案1】:

旧版 DLL 必须包装在 nuget 包中。我以前从未创建过 nuget 包。在这种情况下,我是这样做的:

1.准备为旧版 DLL 创建一个 nuget 包:

cd..
mkdir lib\net40
move MyLibrary.dll lib\net40
nuget spec -AssemblyPath lib\net40\MyLibrary.dll
// which generates a MyLibrary.dll.nuspec XML file.

2.填写或删除nuspec文件中的字段:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyLibrary.dll</id>
    <version>1.0.0</version>
    <authors>Wallace Kelly</authors>
    <description>My test library.</description>
  </metadata>
</package>

3. 打包nuget包并移动到nuget文件夹结构中:

nuget pack MyLibrary.nuspec -OutputDirectory lib\net40
// which generates a MyLibrary.dll.1.0.0.nupkg

4. 创建一个新的 nuget-source 文件夹:

nuget init lib nuget-source

5. 在项目文件夹(例如,MyConsoleApp)中,使用以下内容创建一个新的 nuget.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>

6. 将本地 nuget-source 文件夹添加到 nuget 的源列表中:

nuget sources add -Name "Local Source" -Source "c:\temp\dotnet-core-test\nuget-source" -configfile nuget.config

在 project.json 文件中,添加对旧版 DLL 的依赖项。

"dependencies": {
  "MyLibrary.dll": "1.0.0"
}, 

7.此时,您应该能够恢复、构建和运行项目。

dotnet restore
dotnet build
dotnet run

HT:感谢 @michael-kennedy 帮助我解决这个问题。

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多