在解决方案之间引用DLL

时间:2018-03-11 00:33:33

标签: dll .net-core

我发现在.NET Core中使用DLL的一个有趣的问题(.NET Framework工作正常)。 MVCE如下:

使用以下单个文件创建一个F#(语言无关).NET Core类库(特定代码也不相关):

namespace FSharpClassLibrary

module Say =
    let hello name =
        printfn "Hello %s" name

使用以下代码在单独的解决方案中创建一个C#.NET Core类库 (非常重要 - 如果它们都在同一个解决方案中,它完全有效):

namespace CSharpClassLibrary
{
    public class HelloClass
    {
        public void Hello(string name)
        {
            FSharpClassLibrary.Say.hello(name);
        }
    }
}

此外,添加文件夹dlls,将FSharpClassLibrary.dll复制/粘贴到其中,并将其添加为项目的引用(否则,上述文件将无法编译)。将.dll移动到项目中实际上并不重要,但由于我正在独立于第一个项目分发第二个项目,因此我需要保证DLL可用。

最后,使用以下文件将控制台应用程序添加到与CSharpClassLibrary相同的解决方案中:

using System;
using CSharpClassLibrary;

namespace ConsoleApp1
{
    public class Main1
    {
        public static void Main()
        {
            new HelloClass().Hello("test");

#if DEBUG
            Console.Write("Press any key");
            Console.ReadKey();
#endif
        }
    }
}

最后,进入NuGet并将FSharp.Core版本4.3.4添加到两个C#项目中(只是为了确保所有内容都可以访问F#语言的东西;如果使用C#创建第一个类库则没有必要)。另外,我使用的是VS 15.6;这可能也可能不相关。

将控制台应用程序设置为启动项目并运行它。您将收到以下错误:

  

System.IO.FileNotFoundException:无法加载文件或程序集'FSharpClassLibrary,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'。该系统找不到指定的文件。   文件名:'FSharpClassLibrary,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'      在ClassLibrary1.Facade.Hello1.Hello(String name)      在C:\ Users \ *** \ source \ ConsoleApp1 \ ConsoleApp1 \ Main.cs:第11行的ConsoleApp1.Main1.Main()中

最奇怪的是,如果我绕过CSharpClassLibrary库并在FSharpClassLibrary.dll项目中托管HelloClass.csConsoleApp1,那么一切都按预期进行。如果我使用两个C#DLL就会出现同样的问题,我使用了F#,因为这就是我正在使用的。

我已经尝试过:

  1. 清理并重建所有项目,确保每个项目都引用最新版本。
  2. 引用FSharpClassLibrary.dll以及ConsoleApp1中的孩子(CSharpClassLibrary.dll)。
  3. 使用obj文件夹中的.dll而不是bin文件夹(据我所知,这应该无关紧要)。
  4. 确认FSharpClassLibrary.dll的{​​{1}}文件夹中存在ConsoleApp1
  5. 仔细检查所有项目是否编译为.NET Core,没有.NET Standard项目。

0 个答案:

没有答案