- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我曾尝试搜索以前提出的问题,但很难筛选出它们,因为似乎 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。
正如我们所见,文件引用静态引用您硬盘上的文件。如果所引用的文件不可用,您将收到损坏的引用警告。因此,当您清理解决方案时,任何已构建的程序集都将被清理。出于这个原因,您确实会收到警告。
引用项目会保存目标的项目 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/
我的构建菜单包含两个构建选项: 构建解决方案 构建MyProjectName 如果我选择Build Solution(然后是Debug,Start Debugging (F5)),运行的可执行文件不包
我有一个带有一些输入字段的表单。这些输入字段具有指定的背景渐变,如下所示: input { background: #00b7ea; background: url(data:imag
现在这个遗留代码是多个项目,每个项目都有自己的解决方案。每个项目通过它编译的 dll 引用另一个项目。要让主项目运行,您必须以正确的顺序进行 10 多个单独的构建。 我试图解释如何将所有项目移动到一个
我在 Visual Studio 2013 中处理我的项目,我错误地点击了 Rebuild Solution。我收到以下异常,我不知道如何解决它。请建议。 Server Error in '/' Ap
class solution { void table(final int n) { for (int i = 1; i <= 10; i++) { S
我非常需要了解如何使用 Visual Studio 2010 在 c# 中管理一些非常基本的体系结构问题,而且我在教科书和网站上寻找解决方案时遇到了一些困难。假设我有一个 MyWinForm.sln
我有 Java 背景,正在尝试从 C# 开始。 我想用 C# 创建一个将在其他解决方案中使用的库。在 Eclipse 中,只需创建一个 jar 并将其添加到类路径中即可。我知道VS2013中的每个项目
在我目前的工作中,我需要打开 3 个不同的解决方案,构建并运行它们。是否有任何脚本可以像我单击 Web 服务的“构建解决方案”或“启动”或“Google Chrome”一样执行工作人员? 谢谢。 最佳
有什么方法可以告诉Visual Studio 2005的解决方案资源管理器在svn-checkout后第一次打开解决方案时不要扩展所有项目? 编辑: 感谢您指出 PowerCommands。当我使用带
我的 Visual Studio 解决方案的 Subversion 存储库中有以下目录: 项目名称 标签 分支机构 后备箱 我的解决方案.sln MyProject1(目录) MyProject2(目
我刚刚使用 Update 2 更新了 Visual Studio 2015。 现在,经过几个小时的正常工作,我收到:“检测到内存不足。对此解决方案禁用了完整的解决方案分析。”出现在我的 VS2015
在 Visual Studio Code 中,单击我的测试项目中的“调试测试”代码镜头链接: 导致错误信息: MSBUILD : error MSB1011: Specify which projec
我是Docker的新手,正在尝试为ASP.NET Core应用程序创建Dockerfile。有人可以建议我需要哪些更改吗? 这是我的Dockerfile: FROM microsoft/dotnet:
我的入门类(class)的这个实验要求我们以 pig 拉丁语返回任何用户输入。当我运行它并在控制台中输入任何字符串时,我似乎不断收到的错误是: java.lang.StringIndexOutO
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 11 个月前关闭。 Improv
我的 C++ Concert Cplex 有问题。我正在尝试重新创建最短路径问题。输出到文本文件是: Minimize obj: 2 x_12 + x_13 + 2 x_21 + x_24 + x_
有时,当我浏览我的头文件时,我想在 (doxygen) 文档中添加一些小东西。这可能是关于使用某些函数参数的快速说明,或者只是修复了一个小错字。 但后来我想:哦不,这会在下一个 make 调用时触发重
我正在使用缺少 findall 的高阶 Prolog 变体. 还有一个关于实现我们自己的问题 findall这里:Getting list of solutions in Prolog . 低效的实现
如果您的应用程序必须对大尺寸对象(> 85000 字节)进行大量分配/取消分配,则最终会导致内存碎片,并且您的应用程序将抛出内存不足异常。 这个问题有什么解决方案,还是CLR内存管理的限制? 最佳答案
我是一名优秀的程序员,十分优秀!