无法在 Visual Studio 2012、C# 中加载文件或程序集
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18467049/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Could not load file or assembly in Visual Studio 2012, C#
提问by Lez
I'm working on a C# code on Visual Studio 2012 on Windows 7. My solution contains several projects.
我正在 Windows 7 上的 Visual Studio 2012 上处理 C# 代码。我的解决方案包含多个项目。
I recently added a new project in my solution, and added the dll of this new project in the references of 2 other projects in the solution (one of the being the startup project). The new project itself is referencing to several other projects that are not included in my solution.
我最近在我的解决方案中添加了一个新项目,并在解决方案中其他 2 个项目的引用中添加了这个新项目的 dll(其中一个是启动项目)。新项目本身引用了我的解决方案中未包含的其他几个项目。
Building the projects in the solution works fine, but when I try to run the program (in Debug or in Release) I get an error. Here is the error:
在解决方案中构建项目工作正常,但是当我尝试运行程序(在调试或发布中)时,出现错误。这是错误:
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:
Analysis is my startup project. NewProject is the project I added recently to my solution. ABCD.dll is referenced in NewProject, but the project ABCD is not part of the solution itself.
分析是我的启动项目。NewProject 是我最近添加到我的解决方案中的项目。NewProject 中引用了 ABCD.dll,但项目 ABCD 不是解决方案本身的一部分。
In this error, it is said that the AppBase is file:///C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/
在这个错误中,据说 AppBase 是 file:///C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/
However, when I look at the ABCD reference in NewProject, it says:
但是,当我查看 NewProject 中的 ABCD 参考时,它说:
Assembly ABCD
C:\Users\MyName\Documents\Visual Studio 2012\Projects\np\bin\ABCD.dll
Indeed, ABCD.dll in not in the AppBase address written in the error. But I never said it was there, and I don't understand where this comes from.
确实,ABCD.dll在不在AppBase地址中写错了。但我从来没有说过它在那里,我不明白这是从哪里来的。
I tried to put ABCD.dll in the AppBase address the error is giving me. But each time I rebuild NewProject and (then) my startup project Analysis, ABCD.dll disappears from C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/
我试图将 ABCD.dll 放在错误给我的 AppBase 地址中。但是每次我重建 NewProject 和(然后)我的启动项目分析时,ABCD.dll 从 C:/Users/MyName/Documents/Visual Studio 2012/Projects/MyProgram/Analysis/bin/Debug/ 消失
I am quite new to Visual Studio. I probably did something wrong when adding my new project but I can't understand what it is. If one of you has an idea regarding the method to solve this issue, please don't hesitate to speak !
我对 Visual Studio 很陌生。我在添加新项目时可能做错了什么,但我不明白它是什么。如果你们中的一个人对解决这个问题的方法有什么想法,请不要犹豫,说出来!
采纳答案by BartoszKP
If you need references between projects, then add "Project references" instead of referencing DLL files. If you really need to reference a DLL file, then:
如果您需要项目之间的引用,则添加“项目引用”而不是引用 DLL 文件。如果你真的需要引用一个 DLL 文件,那么:
1) Create a "Libraries" (or something) folder in your project.
1)在您的项目中创建一个“库”(或其他东西)文件夹。
2) Copy the referenced DLL into this folder.
2) 将引用的 DLL 复制到此文件夹中。
3) In VS, use "Add existing item" to add the DLL file to the project. In the file choosing dialog box you need to change the file filter to *.*
for the DLL to appear.
3)在VS中,使用“添加现有项目”将DLL文件添加到项目中。在文件选择对话框中,您需要更改文件过滤器*.*
以显示 DLL。
4) Under the properties of this DLL's node choose "Copy if newer" in Build option.
4) 在此 DLL 节点的属性下,在 Build 选项中选择“Copy if newer”。
5) Add reference to the DLL file in the "Libraries" directory.
5) 在“Libraries”目录中添加对DLL文件的引用。
References between projects are of course better, because as your rebuild them your references are updated automatically. Otherwise you need to replace the DLL file with a fresh one each time you want to update the reference.
项目之间的引用当然更好,因为当您重建它们时,您的引用会自动更新。否则,每次要更新引用时,都需要用新的 DLL 文件替换。