无法更改Visual Studio中引用的“复制本地”(您是否缺少使用指令或程序集引用?)

问题描述:

我有一个本地c#项目,我也检查了源代码控制。这个项目建立并运行良好。无法更改Visual Studio中引用的“复制本地”(您是否缺少使用指令或程序集引用?)

当我从源代码管理克隆项目,并在visual studio中打开它,它不会生成,因为它无法找到Microsoft.ServiceBus.dll中的任何类。例如'找不到类型或命名空间名'QueueClient'(你是否遗漏了使用指令或程序集引用?)'

源控制项目包含相同的packages.config到本地的构建,但是在构建之后缺少/ bin/Debug /文件夹中的dll。

我所看到的一个区别是该dll(解决方案资源管理器 - > myproject - >引用 - > Microsoft.ServiceBus)的引用属性将“复制本地”值设置为false,而在构建的项目中我检查的那个)这被设置为true。但是,在属性窗格中更改它不起作用。当我点击时,它立即翻转回来。这是问题吗?如果是这样的话,那么这个位的配置在文件系统上呢? (或者我怎样才能改变它,使它保持在那个文件中)?

编辑:多一点信息: 该解决方案有两个项目:WorkerRole和TestHarness。 这两个项目都在服务总线上的依赖,但只有一个packages.config文件中WorkerRole项目,并在克隆的解决方案中,WorkerRole构建罚款!那么我怎么做才能让packages.config出现在WorkerRole?我想我做了一些稍微不同的事情来让TestHarness在本地项目中建立起来!

无法更改“复制本地”在Visual Studio中引用(是否缺少using指令或程序集引用?)

您需要使用的NuGet命令行包管理器控制台

Update-Package -reinstall 

强制重新安装软件包引用到项目中。

既然你检查你的项目源代码控制,源代码控制系统的默认行为是省略的NuGet包和源代码控制bin文件夹。当您从源代码控制中克隆项目时,这些文件在您的新克隆项目中缺失。所以'Copy Local'的值设置为false。虽然Visual Studio会自动恢复Nuget包,但NuGet Restore只会恢复软件包目录(\ packages文件夹)中的文件,但不会恢复项目中的文件或修改项目。

此外,的NuGet不会阻止你去除包添加的项目,所以很容易在不经意间改变从包安装的内容,打破你的项目

因此,要解决此问题,我们需要使用NuGet命令行Update-Package -reinstall来强制重新安装程序包引用到项目中,然后从源代码管理克隆项目并引用问题。见下面的链接更多细节:

Nuget Packages are there but missing References

+0

谢谢。在本地项目上运行Update-Package告诉我'在项目'TestHarness'的packages.config中找不到任何软件包。 项目'TestHarness'的当前软件包源中没有软件包更新。因此该项目缺少packages.config!我已经更新了我的原始问题也问:如何创建packages.config? – andrea

+0

你的“TestHarness”是什么项目类型?你有没有通过NuGet为这个项目添加任何软件包?一旦你通过nuget将一个包添加到一个项目中,nuget会自动创建package.config/project.json。由于您缺少此文件,因此在检查源代码管理中的“TestHarness”之前,应检查是否有此文件。 –

+0

你是否手动添加依赖服务总线,不使用nuget?如果你使用nuget添加这个依赖项,nuget会自动添加packages.config。 –

有几件事情在这里:

1)Git有出现在你的源代码管理的解决方案文件夹的根目录中的.gitignore文件。这排除了将DLL存储在源代码管理中。这就是为什么你在克隆副本中缺少DLL。

2)看来你参考Microsoft.ServiceBus是bin文件夹本身,这就是为什么你不能设置CopyLocal为true。

删除您的Microsoft.ServiceBus引用并将其从源文件夹(例如C:\Program Files (x86)\Windows Azure platform AppFabric\SDK\V1.0\Assemblies\NET4.0\Microsoft.ServiceBus.dll(如果您在那里没有看到它,扫描您的硬盘驱动器以获取源副本))中将其添加回来。一旦正确引用,将“复制本地”设置为true。

你应该很好去。

+0

是,该DLL不应该在源代码控制。一些魔法恰好在克隆的构建项目中获得。正是这个过程,我想我想更多地理解。 – andrea

+0

我的建议适用于那些与单个DLL斗争的人。使用NuGet是一种排除问题,因为它并不总是清楚它是如何解决问题的。就你的情况而言,你了解到你错过了软件包,这比你提出的原始问题涉及更多。不过,我希望我的回答能帮助一些有单个DLL问题的人。 – Jazimov