C# 构建在第一次尝试时失败,然后通过

C# 构建在第一次尝试时失败,然后通过,c#,.net,visual-studio,build,C#,.net,Visual Studio,Build,我有很多项目的解决方案,其中两个是Webservice和ConsoleApplicationWebservice是解决方案中的启动项目。我的解决方案构建顺序如下 项目A 项目B 控制台应用程序 网络服务 ProjectA和ProjectB在这两个项目中都被引用。现在,当我清理解决方案并尝试构建解决方案时,它第一次失败了。该错误来自ConsoleApplication项目中的一个类的构造函数,我正在实例化ProjectA的XYZ类。错误是 类型“XYZ”是在未引用的程序集中定义的。您必须添加对程序

我有很多项目的解决方案,其中两个是
Webservice
ConsoleApplication
Webservice
是解决方案中的启动项目。我的解决方案构建顺序如下

  • 项目A
  • 项目B
  • 控制台应用程序
  • 网络服务
  • ProjectA和ProjectB在这两个项目中都被引用。现在,当我清理解决方案并尝试构建解决方案时,它第一次失败了。该错误来自ConsoleApplication项目中的一个类的构造函数,我正在实例化ProjectA的XYZ类。错误是

    类型“XYZ”是在未引用的程序集中定义的。您必须添加对程序集“ProjectA,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”的引用。ProjectPath\Program.cs

    但是,当我再次构建解决方案时,它会成功构建。有人能帮我理解这种行为吗。这对我的项目来说并不是致命的,但我不想让VisualStudio决定什么时候做什么。我想知道这种行为的原因

    另外,当我第一次构建解决方案时,我在ConsoleApplication的调试文件夹中看不到ProjectA或ProjectB的
    .dll
    。但是,在第二次尝试时,这些DLL在调试文件夹中可见,并且生成成功


    关于如何解决这个问题有什么建议吗?

    通常这是一个构建顺序问题。。。在您的解决方案上,右键单击,然后转到构建顺序

    然后设置正确的项目构建顺序


    干杯

    听起来您还没有设置项目依赖项。您必须正确设置构建依赖项,即

  • Web服务依赖于ProjectA和ProjectB
  • 控制台应用程序依赖于ProjectA、ProjectB和Webservice
  • 使控制台依赖于Web服务是很重要的,因为只有这样才能保证在控制台应用程序之前构建Web服务


    对于Visual Studio 2012 do,右键单击解决方案>属性>项目依赖项>

    项目如何相互引用?如果引用项目的输出
    .dll
    ,而不是项目本身,这听起来像是您可能看到的行为。您是在使用项目引用,还是在按文件名引用ProjectA和ProjectB?听起来好像生成顺序有点不正常,它试图在生成ConsoleApplication的同时生成ProjectA。由于ConsoleApplication在ProjectA完成之前构建,因此失败。您第二次运行它时,ProjectA已经生成,一切都通过了。@David:我引用的是项目,而不是DLL。@JoachimIsaksson:有办法修复它吗?我在问题中提到了生成顺序,对我来说似乎是正确的。你能告诉我这里的建造顺序是什么吗?很抱歉。您是否在ProjectA中引用了任何其他第三方dll?是。我引用了我创建的外部dll。您的第二点无效。Webservice正在我的解决方案中引用控制台应用程序。我认为我的建造顺序应该传达这样的信息:)