无法在C#控制台应用程序中使用外部引用。

9
我已经尝试了下面所有的建议,但仍然没有成功。
现在我正在尝试一个控制台应用程序,并且让我解释一下我正在做什么。
1. 我在 VS2010 中创建了一个新的控制台项目。 2. 我添加了很多引用(dll),其中一些不是我的,比如Castle.Winsor和N2 CMS dlls。 3. 在控制台应用程序中,我可以添加使用声明来指示我在使用引用DLL中的名称空间。 4. 我开始编写代码。 5. 一旦编译所有使用引用DLL的代码,立即会抱怨“无法找到类型或命名空间名称''(是否缺少using指令或程序集引用?)”。
我已经尝试将 DLL 设置为始终复制到本地,将 DLL 复制到相同的目录中,尝试通过项目添加引用和添加对 DLL 自身的引用来解决问题。
我在 Web 应用程序项目或 ASP.net 项目中没有遇到这个问题,它们总是正常工作,只有像控制台应用程序或 Windows 服务这样编译成 EXE 文件的东西才会出现问题。
肯定有我忽略的东西,否则我现在就已经解决了这个问题。

1
数据对象 vs 数据对象。当你像这样提出问题时,准确性非常重要。 - Hans Passant
你在代码中引用对象时是否使用了完全限定路径? Data_Objects 是否存在多个命名冲突的可能性? VS 是否提供行号,如果有,你能否在问题中发布错误和错误周围的几行代码? - David
5个回答

37
将项目目标更改为非客户端框架。右键单击项目并选择属性,您应该可以看到一系列框架版本。由于您正在使用VS2010,默认创建的控制台项目的目标是.NET Framework 4.0客户端框架,请将其更改为.NET Framework 4.0。

这其实很有道理,客户端配置文件只针对完整的.NET 4.0框架的一个子集,像System.Web这样的东西被省略了...因此,任何引用了未由客户端配置文件提供的程序集的引用程序集都将无法绑定。 - Matthew Abbott
我发现在99%的情况下,客户端配置文件中都没有我需要的程序集。紧凑性算什么啊? - Dmitri Nesteruk
太好了,成功了 :) 这一定困扰了更多的人,因为没有任何错误信息提到这个问题 - 非常感谢。 - JGilmartin
@Dmitri - 我发现大多数外部库都引用了这些其他程序集,这驱使我使用完整的.NET 4而不是客户端配置文件。唯一不包含的是ASP.NET、一些高级WCF内容和其他零散的部分。实际上,客户端配置文件确实包含了相当多的东西:http://msdn.microsoft.com/en-us/library/cc656912.aspx - Matthew Abbott
@Matthew:你说得对,我想。我发现自己需要像HttpUtility这样的System.Web东西,它相当简单,但不幸的是不在客户端配置文件中... - Dmitri Nesteruk

2
检查所引用的程序集是否将 Copy Local 设置为 true

应该已经为任何未被GAC'd的引用程序集执行此操作。 - Matthew Abbott

0

在记事本中打开您的 .Proj(Windows 服务项目文件)文件,并检查您所指向的程序集位置(data_object)是否相同。

当您在记事本中打开 .Proj 文件时,可以检查以下内容:

项目引用,

        <ProjectReference Include="C:\StackOverflow\StackOverflow.csproj">

如果您提供dll或exe引用,则

 <Reference Include="StackOverflow, Version=1.0.0.0, Culture=neutral,       processorArchitecture=x86">
  <SpecificVersion>False</SpecificVersion>
  <ExecutableExtension>.exe</ExecutableExtension>
  <HintPath>C:\StackOverflow\bin\Debug\StackOverflow.exe</HintPath>
</Reference>

我建议您提供精确的位置,包括驱动器名称,就像上面的示例一样。

另一个选项是您可以尝试:

 1. Clean and rebuild
 2. Add Project reference if you already tried dll reference
 3. Check whether the folder (referred assembly location) is Read Only then remove it. 

0

首先,关于您的问题,很难确定您到底做错了什么,但从您在程序集名称(以及可能在命名空间和类型名称中)使用下划线的事实来看,这表明您对.NET世界还比较陌生。

这提示您通过浏览已编译的程序集添加对其他项目的引用,而不是添加项目引用。在添加引用时,您必须选择“项目”选项卡,而不是浏览程序集。

即使您不认为这是原因,请删除所有引用,并重新添加项目引用以确保绝对没有问题。假设、蠢材等。

完成上述步骤后,我强烈建议您从类型、命名空间和程序集中删除所有下划线。您可能还想阅读一下框架设计指南。


0
在VS 2019中,我有两个项目,一个是C++,另一个是C#控制台,它们在同一个解决方案文件中。当我尝试通过“添加引用”来添加dll引用时,在“引用管理器”窗口中我无法看到浏览按钮,以选择dll文件。
但是当我只创建了一个C#控制台应用程序时,我可以添加dll引用。

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