Visual studio 我应该在TFS或Visual Studio ONline版本中排除对bin\…project..dll的引用吗? 我们的客户之一使用的是基于Team Foundation Server(TFS)的能力

Visual studio 我应该在TFS或Visual Studio ONline版本中排除对bin\…project..dll的引用吗? 我们的客户之一使用的是基于Team Foundation Server(TFS)的能力,visual-studio,tfs,msbuild,azure-devops,csproj,Visual Studio,Tfs,Msbuild,Azure Devops,Csproj,我们正在研究如何使用VisualStudio在线托管构建代理进行自动构建和自动单元测试 我们正试图在此基础上构建一个Web应用程序 我们的Web应用程序解决方案包含许多csproj文件 注意:Web应用程序将使用Visual Studio 2012在本地开发计算机上正确构建和运行 但是,当我们在Visual Studio Online的托管构建代理上构建web应用程序时,它会抛出以下关于找不到我的应用程序的主dll的错误(我的应用程序称为BlahBlah): C:\ProgramFiles(x8

我们正在研究如何使用VisualStudio在线托管构建代理进行自动构建和自动单元测试

我们正试图在此基础上构建一个Web应用程序

我们的Web应用程序解决方案包含许多csproj文件

注意:Web应用程序将使用Visual Studio 2012在本地开发计算机上正确构建和运行

但是,当我们在Visual Studio Online的托管构建代理上构建web应用程序时,它会抛出以下关于找不到我的应用程序的主dll的错误(我的应用程序称为BlahBlah):

C:\ProgramFiles(x86)\MSBuild\Microsoft\ VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets(182):无法复制文件“bin\BlahBlah.dll”,因为找不到该文件。 C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets(182):无法复制文件“bin\BlahBlah.pdb”,因为找不到该文件

因此,我检查了Web应用程序解决方案中的各种csproj文件,发现了以下代码:

<Content Include="bin\BlahBlah.dll" />
<Content Include="bin\BlahBlah.pdb" />

为了使其在Visual Studio Online的托管生成代理上正确运行,上述引用替换为以下内容:

<Content Include="bin\BlahBlah.dll"  Condition="$(IsDesktopBuild) == true" />
<Content Include="bin\BlahBlah.pdb"  Condition="$(IsDesktopBuild) == true" />
<None Include="bin\BlahBlah.dll"   Condition="$(IsDesktopBuild) != true" />
<None Include="bin\BlahBlah.pdb"   Condition="$(IsDesktopBuild) != true" />

替换引用后,我们的应用程序将在VisualStudioOnline的托管构建代理上正确构建


但是,我应该在TFS或Visual Studio ONline生成中排除对bin..project..dll的引用吗?换句话说,我的上述成功构建是否为“假传递”

您不应该引用bin或obj文件夹中的任何文件,也不应该将其中的任何文件签入源代码管理

如果在同一个解决方案中的项目之间存在依赖关系,则应将所有项目都作为一个项目引用。右键单击项目并选择“添加引用”,然后选择“项目”选项卡


如果您的依赖项位于不同的解决方案中,那么您应该将希望lt获取依赖项的位发布为本地Nuget包。然后,通过右键单击并选择“管理Nuget软件包”,您可以使用Nuget软件包管理器对此进行依赖。

您不应引用bin或obj文件夹中的任何文件,也不应将其中的任何文件签入源代码管理

如果在同一个解决方案中的项目之间存在依赖关系,则应将所有项目都作为一个项目引用。右键单击项目并选择“添加引用”,然后选择“项目”选项卡


如果您的依赖项位于不同的解决方案中,那么您应该将希望lt获取依赖项的位发布为本地Nuget包。然后,通过右键单击并选择“管理Nuget软件包”,您可以使用Nuget软件包管理器对其进行依赖。

最好将这些作为Nuget软件包引用,以便VSO可以在构建过程中将其拉入。对不起,我应该提到我的应用程序名为BlahBlah。因此,VisualStudioOnline的托管生成代理抱怨找不到应用程序自己的dll文件。应用程序自己的dll将不在packages文件夹中。你明白了吗?但是这些应该是项目引用,而不是内容包含。最好你把它们作为NuGet包引用,这样VSO就可以在构建过程中把它们拉进来。对不起,我应该提到我的应用程序叫做BlahBlah。因此,VisualStudioOnline的托管生成代理抱怨找不到应用程序自己的dll文件。应用程序自己的dll将不在packages文件夹中。你明白吗?但这些应该是项目参考,而不是内容。正确。如果不使用Nuget,则必须模拟某种“二进制检索”。Nuget之前,很多人将第三方依赖性放在源代码管理中……并将它们从那里拉了出来。我不喜欢这种方法。ApacheIvy有一个命令行版本,但它有一个学习曲线,大多数.net开发人员不会为此付费,但它在Nuget之前是一个相当好的解决方案。Nuget是微软风格的二进制托管和检索。但决不要引用/bin或/obj文件夹。请更正。如果不使用Nuget,则必须模拟某种“二进制检索”。Nuget之前,很多人将第三方依赖性放在源代码管理中……并将它们从那里拉了出来。我不喜欢这种方法。ApacheIvy有一个命令行版本,但它有一个学习曲线,大多数.net开发人员不会为此付费,但它在Nuget之前是一个相当好的解决方案。Nuget是微软风格的二进制托管和检索。但决不要从/bin或/obj文件夹中引用。