我试图搜索之前提出的问题,但是很难对它们进行筛选,因为看起来99%是在构建后引用引用问题,而我的问题是引用问题干净后。
问题如下,我正在复兴一个旧项目 - 我以前从未尝试过这个项目 - 当我构建解决方案时,所有内容都会编译并正常工作。
当我执行Clean Solution时,我会收到一个项目的引用错误。有问题的项目是Visual Basic Web服务项目。它引用了另外两个项目(它们是C#),当我查看Project Properties时,在References窗格中我看到用于引用的Path是SolutionFolder \ Project \ bin \ Debug \ Projectname.dll。
因此,每当我清理我的解决方案时,bin \ Debug都会被清空并且缺少引用。这是否意味着错误地设置了引用?
我从研究项目参考对VB项目的工作方式不同的问题中理解,但我发现在清理解决方案的那一刻,C#和VB项目的组合会产生参考错误,这很奇怪。
任何人都可以帮助我/解释为什么会这样吗?
好的,我已经创建了重新创建问题的步骤。它的工作原理如下:
Visual Studio - >新项目 - > Visual Basic WCF服务应用程序
解决方案 - >添加 - >新项目 - > C#类库
在类库中添加以下函数
namespace ClassLibrary1
{
public class Class1
{
public static int Foo()
{
return 1;
}
}
}
Visual Basic WCF项目 - >添加 - >参考 - > C#ClassLibrary(来自解决方案项目)
构建解决方案
在服务中,我按如下方式更改GetData函数:
Public Function GetData(ByVal value As Integer) As String Implements IService1.GetData
Dim foo = ClassLibrary1.Class1.Foo
Return String.Format("You entered: {0}", value)
End Function
构建解决方案
现在清洁解决方案。
Visual Studio现在告诉我我有引用错误。
再次建造。
错误消失了。
答案 0 :(得分:4)
我认为现在将引用设置为bin\debug
文件夹中的物理dll文件,而不是构建该dll文件的项目。
如果您设置对物理dll文件的引用,Visual Studio将始终期望该文件存在,否则它会抱怨。
如果设置对构建dll文件的项目的引用,visual studio将查看该项目,并且将始终存在。 Visual Studio不会抱怨丢失的dll文件,因为它对引用的dll文件不感兴趣。
删除您现在拥有的引用,并创建一个指向项目而不是dll文件的新引用。
答案 1 :(得分:4)
正如Maarten所述,添加项目引用或添加文件引用之间存在重要差异。我想更详细地解释一下 - 原始信用归Maarten所有!
为程序集添加引用有严重不同的方法。有关详细信息,请查看 MSDN文章 How to: Add or Remove References By Using the Reference Manager。
正如op要求我们关注文件和项目参考。我将展示VS如何保存参考设置以及它们对您的项目有何影响!在我的例子中,我用三个项目(a,b和c)制定了一个解决方案。 项目C指的是A和B.
我们可以在您的硬盘上看到文件引用静态引用文件。如果提到的文件不可用,您将收到损坏的参考警告。因此,当您清理解决方案时,任何已构建的程序集都将被清除。因此,您会收到警告。
参考项目会保存目标的项目GUID 。因此,在构建当前项目时,VS将查找目标项目并构建它们 - 如有必要。
这就是MSDN声明的原因:
您应该避免向另一个项目的输出添加文件引用 在同一解决方案中,因为这种策略可能会导致编译 错误。而是使用Reference Manager对话框的Solution选项卡 用于创建项目到项目引用的框。这种策略使团队成为可能 通过更好地管理班级,使开发更容易 您在项目中创建的库。有关更多信息,请参阅 对损坏的参考文献进行故障诊断。
修改强>
由于您的项目包含不同语言,因此无法解析您的项目参考。您可以在一个解决方案中查看处理两种语言的similar SO question。显然虽然它是一个项目引用,但VS像文件引用一样处理它。
在Visual Studio中,several language services是特定于语言的。因此,如果您从一个C#程序集中引用另一个C#程序集,则相应的语言服务将在项目引用创建时处理任何潜在的引用错误。
但是如果您从C#引用VB.net程序集(或者反过来说)那么就没有“inter-”语言服务。一个非常简单的例子是来自c#程序集的相关<summary> tags
将不会出现在VB.net项目中(如链接的问题/注释所述)。
答案 2 :(得分:1)
您的项目依赖项是否已在此Visual Basic项目上正确设置。
您可以通过右键单击Solution Explorer
中的项目并转到Project Dependencies
来指定依赖项。确保在此处检查您的其他两个引用项目。
此外,您是否可以检查Visual Basic项目引用的两个项目是否在Configuration Manager
配置的Debug
窗口中设置为Build。
答案 3 :(得分:1)
我要感谢大家的快速而明确的答案。
我已经尝试了解决方案并搜索了一些,但我还没有解决问题,觉得这篇文章最适合我的情况: