你是否缺少一个程序集引用?编译错误 - Visual Studio

37
我目前正在开发一个服务器控件,供我们公司其他应用程序与WCF服务进行接口。每当我进行代码更改并重新编译控件时,我会将AsseemblyInfo.cs中的AssemblyVerison和AssemblyFileVersion类增加一个版本号。例如,我的最新构建从1.0.07.0变为1.0.08.0。
当使用该控件的应用程序通过复制bin目录中的最新文件来更新文件并尝试编译时,他们会收到以下错误消息:
“The type or namespace name 'MyControl' does not exist in the namespace 'MyNamespace' (are you missing an assembly reference?)”
为了解决此错误,他们必须删除当前引用并重新添加引用。
有没有办法在不必删除和重新添加引用的情况下更新服务器控件?
我没有对服务器控件进行强命名。
@JPunyon - 你是否意味着使用该服务器控件项目添加到他们的解决方案中?
11个回答

42
在我的情况下,这是一个项目,它是使用目标框架:“。Net Framework 4.0 Client Profile”定义的,尝试引用使用目标框架:“。Net Framework 4.0”定义的dll项目。
一旦我将项目设置更改为使用目标框架:“.Net Framework 4.0”,一切都能很好地构建。
右键单击项目->属性->应用程序->目标框架。

19
在解决方案资源管理器中右键单击程序集引用,选择属性,禁用 "Specific Version" 选项。

13
如果以上解决方法都不起作用,请尝试这个10秒钟的修复方法。
在“解决方案资源管理器”中导航到启动项目。右键单击,选择属性 > 应用程序 > 目标框架。将目标框架更改为其他任何内容。在确认对话框中选择,等待几秒钟使更改生效,然后将框架切换回之前的设置。
希望此错误会像我一样消失!

1
太棒了,谢谢!很奇怪但它起作用了。 - Arthur Tacca

2

您是否为程序集进行了强名称签名?如果是这样,自动递增构建号并不是一个好主意,因为每次更新构建号时,您还必须更新所有引用。


2
如果之前代码可以运行但现在出错了,正如上面的答案所提到的,可能已经修改了其中一个配置。采用蛮力方法,关闭VS编辑器并删除与.sln文件相同目录下的.vs文件夹。所有配置都将被清除,并从存储库文件中获取。

1
这个方法解决了我的问题,只需删除binobj文件即可。 - Joel Wiklund

1

我撞到了指引我正确方向的答案,但是......

对于那些使用Visual C++的人:

如果您需要关闭版本自动递增功能,可以在“AssemblyInfo.cpp”文件中更改此值(所有CLR项目都有一个)。 给它一个真实的版本号而不带星号,它将按照您想要的方式工作。

只需不要忘记在程序集上实现您自己的版本控制!


0

我在使用 Azure DevOps Services (MS-hosted) 的构建管道时,在 TFVC 存储库上遇到了这个错误。

在我的情况下,我正在一个分支中工作,并且不小心从主干的包文件夹中添加了引用,而不是从分支中添加。一旦我从分支内部添加了引用,它就开始成功编译了。

也就是说,在 \branch-beta\sierra.csproj 上工作时,我不小心引用了 \trunk\packages\delta.dll。显然,我需要引用 \branch-beta\packages\delta.dll。混淆发生的原因是路径在 添加引用 窗口中没有突出显示,而我没有仔细检查。


0
在我的情况下,我必须将“复制本地”设置更改为true(右键单击解决方案资源管理器中的程序集,选择属性,找到并更改“复制本地”属性的值)。一旦更改了此设置,我的WCF服务发布后会将文件复制到服务器上,错误就消失了。

0
删除你解决方案目录中的'Web.Debug.config'和'Web.Release.config'文件,它应该可以消除所有错误。

你能进一步解释一下这里发生了什么,为什么你的答案有效吗?错误的原因是什么? - Sinh Nguyen
你是否缺少一个程序集引用?我遇到了24个相同的错误?首先,我尝试修复程序集引用(但一切似乎都很好),最后我尝试删除了两个文件,就像我上面提到的那样,所有的错误都消失了。(我猜在进行调试或发布构建时,.Net Framework可能会从一个版本跳转到另一个版本,这只是一个猜测。) - Pavan Bandi

0
在使用Visual Studio 2017 Community创建新的空白UWP项目时,出现了以下错误:

enter image description here

在还原了NuGet缓存之后,该引用重新出现在项目中。


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