gpt4 book ai didi

c# - Clean Solution 导致引用错误

转载 作者:太空狗 更新时间:2023-10-30 00:19:01 24 4
gpt4 key购买 nike

我曾尝试搜索以前提出的问题,但很难筛选出它们,因为似乎 99% 都是引用问题在构建之后,而我的问题是引用问题清洁后

问题如下,我正在恢复一个旧项目 - 不幸的是我以前从未参与过 - 并且在我构建解决方案时一切都可以编译并正常工作。

不过,当我执行一个 Clean Solution 时,我得到了一个项目的引用错误。所讨论的项目是一个 Visual Basic Web 服务项目。它有对其他两个项目(C#)的引用,当我查看“项目属性”时,在“引用” Pane 中我看到用于引用的路径是 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 现在告诉我存在引用错误。

再次构建。

错误消失了。

最佳答案

作为Maarten声明添加项目引用添加文件引用 之间存在重要区别。我想更详细地解释它 - 原始学分归于 Maarten!

几种不同的方法可以将引用添加到程序集。有关详细信息,您可以查看 MSDN 文章 How to: Add or Remove References By Using the Reference Manager .

按照运算符(operator)的要求,我们专注于文件和项目引用。我将展示 VS 如何保存引用设置以及它们对您的项目有何影响!在我的示例中,我制作了一个包含三个项目(a、b 和 c)的解决方案。 项目 C 是指 A 和 B。

文件引用(浏览)

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

正如我们所见,文件引用静态引用您硬盘上的文件。如果所引用的文件不可用,您将收到损坏的引用警告。因此,当您清理解决方案时,任何已构建的程序集都将被清理。出于这个原因,您确实会收到警告。

项目引用(解决方案-项目)

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

引用项目会保存目标的项目 GUID。因此,在构建当前项目时,VS 将查找目标项目并构建它们 - 如有必要


这就是 MSDN 声明的原因:

You should avoid adding file references to outputs of another project in the same solution, because this tactic may cause compilation errors. Instead, use the Solution tab of the Reference Manager dialog box to create project-to-project references. This tactic makes team development easier by enabling better management of the class libraries that you create in your projects. For more information, see Troubleshooting Broken References.


编辑

由于您的项目包含不同的语言 VS 无法解析您的项目引用。你可能会看看这个 similar SO question在一个解决方案中处理两种语言。显然,虽然它是一个项目引用,但 VS 将其处理为文件引用。

在 Visual Studio 中有 several language services这是语言特定的。因此,如果您从一个 C# 程序集引用另一个 C# 程序集,相应的语言服务将处理项目引用创建时的任何潜在引用错误。

但如果您从 C# 引用 VB.net 程序集(或相反)没有“跨”语言服务。一个很简单的例子就是相关的<summary> tags来自 c# 程序集的代码不会出现在 VB.net 项目中(如链接的问题/评论所述)。

关于c# - Clean Solution 导致引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26402832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com