Clean Solution导致参考错误

时间:2014-10-16 11:06:52

标签: c# vb.net visual-studio

我试图搜索之前提出的问题,但是很难对它们进行筛选,因为看起来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现在告诉我我有引用错误。

再次建造。

错误消失了。

4 个答案:

答案 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.

文件参考(浏览)

File reference - as saved in *.csproj/*.vbproj

我们可以在您的硬盘上看到文件引用静态引用文件。如果提到的文件不可用,您将收到损坏的参考警告。因此,当您清理解决方案时,任何已构建的程序集都将被清除。因此,您会收到警告。

项目参考(解决方案 - 项目)

Project reference - as saved in *.csproj/*.vbproj

参考项目会保存目标的项目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)

我要感谢大家的快速而明确的答案。

我已经尝试了解决方案并搜索了一些,但我还没有解决问题,觉得这篇文章最适合我的情况:

https://stackoverflow.com/a/3989670/3895498