【问题标题】:Could not load file or assembly in Visual Studio 2012, C#无法在 Visual Studio 2012、C# 中加载文件或程序集
【发布时间】:2013-08-27 13:36:30
【问题描述】:

我正在 Windows 7 上的 Visual Studio 2012 上编写 C# 代码。我的解决方案包含多个项目。

我最近在我的解决方案中添加了一个新项目,并将这个新项目的 dll 添加到解决方案中其他 2 个项目的引用中(其中一个是启动项目)。新项目本身引用了我的解决方案中未包含的其他几个项目。

在解决方案中构建项目工作正常,但是当我尝试运行程序时(在调试或发布中)我收到错误。这是错误:

System.IO.FileNotFoundException was caught
  HResult=-2147024894
  Message=Could not load file or assembly 'ABCD, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
  Source=NP
  FileName=ABCD, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  FusionLog==== Pre-bind state information ===
LOG: User = MyCompany\MyName
LOG: DisplayName = ABCD, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : NP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\MyName\Documents\Visual Studio 2012\Projects\MyProgram\Analysis\bin\Debug\Analysis.vshost.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/ABCD.DLL.
LOG: Attempting download of new URL file:///C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/ABCD/ABCD.DLL.
LOG: Attempting download of new URL file:///C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/ABCD.EXE.
LOG: Attempting download of new URL file:///C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/ABCD/ABCD.EXE.

  StackTrace:
       at NewProject.DATA.SetType(NP np, String code, OrderType orderT, MODEL MODELv)
       at NewProject.DATA.SetData(NP np, String no, String type, String law, String time, OrderType orderT, MODEL MODELv)
  InnerException:

分析是我的启动项目。 NewProject 是我最近添加到我的解决方案中的项目。 在 NewProject 中引用了 ABCD.dll,但项目 ABCD 不是解决方案本身的一部分。

在这个错误中,据说AppBase是file:///C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/

但是,当我查看 NewProject 中的 ABCD 参考时,它说:

Assembly ABCD
    C:\Users\MyName\Documents\Visual Studio 2012\Projects\np\bin\ABCD.dll

确实,ABCD.dll中没有在AppBase地址中写入错误。但我从来没有说过它在那里,我不明白这是从哪里来的。

我试图将 ABCD.dll 放在错误给我的 AppBase 地址中。但是每次我重建 NewProject 和(然后)我的启动项目 Analysis 时,ABCD.dll 都会从 C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/ 中消失

我对 Visual Studio 还是很陌生。添加新项目时我可能做错了什么,但我不明白它是什么。如果你们中的任何人对解决此问题的方法有任何想法,请不要犹豫!

【问题讨论】:

    标签: c# visual-studio-2012 filenotfoundexception


    【解决方案1】:

    如果您需要项目之间的引用,则添加“项目引用”而不是引用 DLL 文件。如果确实需要引用一个DLL文件,那么:

    1) 在您的项目中创建一个“库”(或其他)文件夹。

    2) 将引用的 DLL 复制到此文件夹中。

    3) 在 VS 中,使用“添加现有项”将 DLL 文件添加到项目中。在文件选择对话框中,您需要将文件过滤器更改为*.*,DLL 才会出现。

    4) 在此 DLL 节点的属性下,在 Build 选项中选择“Copy if newer”。

    5) 在“Libraries”目录中添加对DLL文件的引用。

    项目之间的引用当然更好,因为当您重建它们时,您的引用会自动更新。否则,每次要更新引用时,都需要将 DLL 文件替换为新文件。

    【讨论】:

    • 出于颠覆的原因,我用 NP.dll 引用了 NewProject 对不起,安德鲁和你的答案感觉不清楚。你说我应该(我可能误解了,因为这对我来说毫无意义):1)在项目 NewProject 中创建空的“Libraries”文件夹 2)在其中复制 ABCD.dll 和 NewProject 所需的其他 DLL。 3)?不确定您在谈论什么 DLL 或项目。无论如何,我不能使用“添加现有项目”来添加 DLL 文件(不会出现 dll 文件)。我所做的是 NewProject > Add Reference > ABCD.dll 4)“如果较新则复制”选项出现在文件属性中,但不在参考属性中
    • 您使用“添加现有项目”将 DLL 添加到项目中的文件夹“库”。要显示 DLL,请将右下角的过滤器更改为 . 或 *.dll(默认情况下,它只寻找要添加的代码文件)。在此之后,您将能够选择“如果更新选项则复制”。这样,您的 DLL 将与允许您运行项目的 exe 文件一起复制。
    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 2017-02-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多