【问题标题】:Wrongly created output folders with Visual Studio 2008使用 Visual Studio 2008 错误地创建了输出文件夹
【发布时间】:2008-11-14 15:58:18
【问题描述】:

我有很多项目的解决方案。实际上有一个核心项目和一些插件。我更改了所有插件的 OutputPath,因此所有二进制文件最终都位于 Core bin\debug 文件夹中。 (这是必要的,因为核心没有插件引用,因此在编译时它不会“包含”插件二进制文件。)

所以基本上我的文件夹结构如下:

解决方案 我的解决方案.sln 插件1\ 插件2\ 核心\bin\debug

每个插件的输出路径都是“..\Core\bin\debug”。当我打开解决方案时,Visual Studio 在解决方案的父文件夹中创建一个文件夹“Core\bin\debug”,就好像相对路径从 .sln 文件开始一样。但是,当我构建解决方案时,二进制文件会输出到正确的路径(“Solution\Core\bin\debug”)。

核心\bin\debug

对我来说,这看起来像是一个 Visual Studio 错误,但也许我在某处忽略了一些选项。任何想法如何解决这个问题?

PS:我知道这不是一个关键问题,因为一切都构建和工作正常,但是我不喜欢无意义的文件夹挂在周围的想法

【问题讨论】:

    标签: c# visual-studio-2008


    【解决方案1】:

    您可以为它们创建一个构建后脚本(Properties \ Build Events 选项卡),而不是更改插件的输出位置,然后将它们复制到 Core 文件夹。这样可以防止与输出文件夹混淆。

    这个命令行应该可以帮到你:

    copy "$(TargetPath)" "$(SolutionDir)Core\$(OutDir)"
    

    如果您还需要复制 .pdb 和 .config 文件,可以添加更多行:

    copy "$(TargetPath).pdb" "$(SolutionDir)Core\$(OutDir)"
    copy "$(TargetPath).config" "$(SolutionDir)Core\$(OutDir)"
    

    如果你真的想用一行来做,这也应该可以,虽然它不是那么干净:

    copy "$(TargetPath)*" "$(SolutionDir)Core\$(OutDir)"
    

    如果您在主项目和附加组件中使用的输出路径不同,则需要将 $(OutDir) 替换为硬编码值。如果您将它们设置为针对典型的“\bin\Debug”文件夹(或者只是保留默认值),那么您可以使用 $(OutDir) 值。

    【讨论】:

    • 您的命令行不会复制 .pdb .config 文件,这可能是个问题(无法正确调试)。使用 $(OutDir) 是非常错误的,它指的是当前项目而不是 Core 的项目。
    • 此外,这实际上会复制很多文件。对于所有插件都依赖于Core,这意味着核心程序集(及其自身的依赖项)将被复制到每个插件输出文件夹中。
    • $(OutDir) 的使用假定您为两个项目构建设置了相同的目标目录(通常是“\bin\Debug”)。如果不是这种情况,您将不得不对其进行硬编码。
    • 回复。第二条评论:这不会复制除插件 .dll 之外的任何内容。它将它们复制到 Core bin,而不是将 Core 二进制文件复制到插件路径。
    • 当 VisualStudio 构建插件时,它会在插件的输出文件夹中“导入”核心。可以做的是将所有插件引用(当然包括核心)的“复制本地”设置为 false。那会奏效的。
    【解决方案2】:

    不要使用“..\Core\bin\debug”,而是使用“$(SolutionDir)\Core\bin\debug”。

    【讨论】:

    • 我试过了。但是宏不能用于输出路径。构建时会创建目录“$(SolutionDir)”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    相关资源
    最近更新 更多