【问题标题】:How to use $(OutDir) in Pre-Build Event?如何在预构建事件中使用 $(OutDir)?
【发布时间】:2013-03-28 11:39:09
【问题描述】:

$(OutDir) = \bin\Release (in local with VS2012)

$(OutDir) = C:\\...\BuildDefinition\Binaries (on TFS2010 Team Build)

如何在 Pre-build 事件中编写适用于这两种情况的 XCOPY?

在我的 project2 中,我引用了 project1。所以我需要这样做:

在本地:

XCOPY /Y $(SolutionDir)Project1\$(OutDir)Project1.dll"

"$(SolutionDir)MyProject2\Objects\Assemblies"

关于团队建设

XCOPY /Y "$(OutDir)Project1.dll" "$(SolutionDir)Project2\Objects\Assemblies"

谢谢。

【问题讨论】:

  • 如果你引用了这个项目,为什么不能把 CopyLocal 设置为 true?

标签: visual-studio-2012 msbuild tfsbuild


【解决方案1】:

这是一个有用的构建事件检查:

if "$(BuildingInsideVisualStudio)" == "" 

这将允许您在 Visual Studio 中而不是在 TeamBuild(msbuild) 上运行时定义构建事件

【讨论】:

    【解决方案2】:

    作为最佳实践,您不应从 TFS 构建或 Visual Studio 在预构建目标中调用 XCOPY 以获得所需的 DLL 引用。

    在项目 2 中创建对项目 1 的项目引用。这将确保正确编译和引用最新的代码。

    TFS 会自动为您移动 dll。如果您将引用设置为复制本地,Visual Studio 也会自动知道如何找到它,并将两个 dll 移动到您的输出文件夹。

    如果您有一个未编译的第 3 方 dll,那么最佳做法是创建一个名为 lib\ 或 dependencies\ 的文件夹并从该位置引用该 dll。

    希望这会有所帮助。

    【讨论】:

    • 谢谢,但我做不到。我引用了一个 SQLCLR 项目,在 VS2012 中,我们无法引用该项目。构建失败。所以在我的数据库项目中,我引用了一个从 SQLCLR 项目复制到我的数据库项目文件夹的 SQLCLR 程序集,并带有预构建事件。
    • 您应该仍然能够将 SQLCLR 作为数据库项目中的项目引用进行引用。如果您的构建失败,那么听起来您还有其他问题。无论如何,你找到了你需要的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    相关资源
    最近更新 更多