如何从控制台项目调用C#DLL?

时间:2015-03-04 18:37:11

标签: c# exception dll

我的C#项目出了问题。这是我的情景。

我有一个外部dll让我们说original.dll我需要将它包装好以便它可以在多个vb.net应用程序中使用,所以我要制作另一个dll来包装这个名为{{1}的原始dll }。所以当我正在开发这个类库dll时,我正在使用一个简单的控制台项目来测试它,我包含了引用,构建并测试它没有问题...至少第一次,因为当我尝试重建时我的库再次运行它会引发异常

  

FileNotFoundException异常

     

无法加载文件或程序集'LynkLib,Version = 1.0.5533.27875,Culture = neutral,PublicKeyToken = null'或其任何依赖项。

我已经双重检查了VS中的引用,以及我文件夹中的文件。我尝试重新启动VS而没有。

这是我的代码,但我不知道它是否有帮助,因为我认为是某种配置问题。

外部图书馆

external.dll

要测试的控制台项目

using System.IO;
using System.Net;
...

[assembly: CLSCompliant(true)] //to use also in vb.net 

namespace externalDLL{

    [ComVisible(true)]
    public class Lynk
    {
        //...my code
    }
}

更新

我发现问题出在... using externalDLL; namespace TestLynk { class Program { static void Main(string[] args) { externalDLL.Lynk l = new Lynk(); //Here the exception is triggered ... } } } 上。我无法修改该DLL的代码,我只能编辑original.dll。我反编译原始的dll,我可以看到以下汇编信息

external.dll

在剩下的代码中,我可以看到很多问题,有很多,但他们基本上说两件事using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; // Assembly LynkLib, Version=1.0.5533.27875, Culture=neutral, PublicKeyToken=null // MVID: E24FF563-B283-431E-9D53-71A59E4750E1 // References: System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // References: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // References: System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // References: System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 [assembly: AssemblyTitle("LynkLib")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("###")] [assembly: AssemblyProduct("###")] [assembly: AssemblyCopyright("###")] [assembly: AssemblyTrademark("")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyVersion("1.0.5533.27875")] // ISSUE: explicit constructor call

我还将我的.NET版本降级为4.0但仍有问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通常情况下,当您引用构建到不同.net目标或平台(x86或64位)的dll作为当前项目的设置时。否则,其中一个dll正在引用另一个无法找到的dll。您可以从JetBrains免费下载DotPeek并安装。用DotPeek打开dll,看看他们引用了哪些其他dll。