由于缺少不丢失的程序集引用,Visual Studio拒绝构建项目

时间:2015-04-30 08:12:59

标签: c# .net visual-studio windows-services assembly-references

我正在构建一个c#windows服务,并在我的项目中添加了几个程序集引用(我自己的其他项目)。

构建时出现以下错误:

  

“错误25找不到类型或命名空间名称'TestClass'(您是否缺少using指令或程序集引用?”

有趣的是,csproj文件中的引用路径是正确的,除此之外,引用项目中的类和命名空间(根据Visual Studio缺失)正被Intellisense接收甚至“go”定义“功能正常。此外,我在与我的新Windows服务完全相同的文件夹中有其他项目,他们拿起装配参考就好了。所有引用的项目都包含在解决方案中。

我使用的是Visual Studio 2013 Update 3.我确实没有可以显示的代码可以为您提供更多信息,但如果您想查看一些屏幕截图或其他内容,请告诉我。

到目前为止的尝试:

更新 当我在引用列表中选择一个“缺失”引用并转到属性时,没有定义路径。然而,相对路径在csproj文件中是正确的。混乱。

更新2 删除所有引用,重新加载项目,然后为我做一个干净的修复。显然,问题是由于构建堆栈中没有更新所有dll引起的。

8 个答案:

答案 0 :(得分:21)

在我的例子中,目标框架项目和我想要使用这个程序集的项目的目标框架是不同的。 装配项目的目标框架为4.5,我项目的目标框架为4.0。

当我将项目的目标框架更改为汇编项目的目标框架(即从4.0到4.5)时,它可以正常工作。

更改项目的目标框架,

右键单击项目 - >属性 - >申请 - >目标框架

此目标框架是下拉列表,从此列表中选择所需的框架。

答案 1 :(得分:10)

1.删除所有参考文献

2.Build - >清洁解决方案

3.使用此project清理您的项目,因为有时视觉工作室无法整齐地清理所有内容。

答案 2 :(得分:2)

另一个可能的问题可能是程序集之间的目标.NET版本不匹配。我遇到了相同的症状,并为我设置相同版本的框架。

答案 3 :(得分:0)

确保您已选择"仅限构建"在错误列表中,不要选择" IntelliSense"那是浪费时间。

答案 4 :(得分:0)

我有同样的问题。或至少症状是相同的。我的解决方案位于网络驱动器上。 将解决方案移至本地驱动器可以为我解决问题。

原因显然是Windows 10没有将网络驱动器视为足够受信任的位置。在我设法以某种方式打破解决方案之前,它一直工作良好。 Visual Studio显然没有执行所需的修复操作所需的权限。

答案 5 :(得分:0)

重新安装软件包对我有用。

在程序包管理器控制台中,运行以下命令以重新安装所有程序包。

update-package -reinstall

您可以通过以下方式定位单个包装:

update-package PACKAGE_NAME -reinstall

答案 6 :(得分:0)

我认为您缺少一个名为Bogus的Nuget库。您可以从Visual Studio中的Nuget-Solution安装程序安装它。只需安装它,然后在类文件中添加using Bogus.DataSets;。希望这能解决您的问题。

答案 7 :(得分:0)

我遇到了类似的问题:编译器抱怨缺少程序集引用,即使它在 csproj 文件中。

没有引用的错误:

<块引用>

错误 CS0246:找不到类型或命名空间名称“IMyService”(您是否缺少 using 指令或程序集引用?)

所以我添加了参考:

<Reference Include="My.Library, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>path/to/lib/My.Library.dll</HintPath>
</Reference>

然后得到一个稍微不同的错误:

<块引用>

错误 CS0012:类型“IMyService”是在未引用的程序集中定义的。您必须添加对程序集“My.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”的引用。

即使在更新引用以匹配错误消息中的确切字符串后,我仍然遇到第二个错误。

问题是我混合了签名和未签名的程序集。我的项目架构大致是这样的:

  • A.dll - 未签名的程序集
  • B.dll - 签名的程序集;引用A.dll;编译正常
  • C - 引用 A.dll 和 B.dll;个人参考OK;在 B 中调用从 A 返回类型的方法时出现上述错误

我通过签署程序集解决了我的问题(在上面的示例中为“A”)。我通过引用 StrongNamer NuGet 包来做到这一点。