在Visual Studio 2012中无法加载文件或程序集,C#

3
我正在使用Windows 7上的Visual Studio 2012编写C#代码。我的解决方案包含多个项目。
我最近向我的解决方案添加了一个新项目,并在解决方案中的2个其他项目的引用中添加了此新项目的dll(其中一个是启动项目)。新项目本身引用了几个未包含在我的解决方案中的其他项目。
构建解决方案中的项目运作良好,但当我尝试运行程序(在Debug或Release模式下)时,出现错误。以下是错误信息:
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是我最近添加到我的解决方案中的项目。 ABCD.dll被引用在NewProject中,但是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非常陌生。当添加我的新项目时,我可能做错了什么,但我无法理解具体是什么。如果您有任何关于解决此问题的方法,请不要犹豫,告诉我!

1个回答

4
如果您需要项目之间的引用关系,则应添加“项目引用”而不是引用 DLL 文件。如果确实需要引用 DLL 文件,则应执行以下操作:
1)在项目中创建“Libraries”(或其他名称)文件夹。
2)将被引用的 DLL 复制到此文件夹中。
3)在 VS 中,使用“添加现有项”将 DLL 文件添加到项目中。在文件选择对话框中,需要将文件筛选器更改为 *.* 才能显示 DLL 文件。
4)在此 DLL 节点的属性下,在构建选项中选择“复制更新的文件”。
5)在“Libraries”目录中添加对 DLL 文件的引用。
当然,项目之间的引用关系更好,因为在重新生成它们时,引用会自动更新。否则,每次要更新引用时,您都需要将 DLL 文件替换为新的文件。

由于版本控制的原因,我使用NP.dll引用NewProject。抱歉,安德鲁和你的回答让我感到不清楚。你说我应该(我可能误解了,因为这对我来说没有意义):1)在项目NewProject中创建空的“Libraries”文件夹 2)在其中复制ABCD.dll和其他NewProject所需的DLL。 3)?不确定你在谈论哪个DLL或项目。无论如何,我无法使用“添加现有项”来添加DLL文件(dll文件不会出现)。我所做的是NewProject>添加引用> ABCD.dll 4)“如果较新则复制”选项出现在文件属性中,但不出现在引用属性中。 - Lez
你可以使用“添加现有项”将DLL添加到项目中的“Libraries”文件夹中。为了使DLL出现,您需要更改右下角的筛选器为*..dll(默认情况下只会查找代码文件以进行添加)。在此之后,您将能够选择“仅在较新时复制”的选项。这样,您的DLL将与exe文件一起被复制,使您能够运行该项目。 - BartoszKP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接