C# 使用Visual Studio 2008错误地创建了输出文件夹

C# 使用Visual Studio 2008错误地创建了输出文件夹,c#,visual-studio-2008,C#,Visual Studio 2008,我有很多项目的解决方案。实际上有一个核心项目和一些插件。我更改了所有插件的OutputPath,因此所有二进制文件最终都位于Core bin\debug文件夹中。(这是必要的,因为核心没有插件参考,因此在编译时不“包括”插件二进制文件。) 因此,我的文件夹结构基本如下: Solution MySolution.sln Plugin1\ Plugin2\ Core\bin\debug 解决方案 MySolution.sln 插件1\ 插件2\ 核心\bin\debug 每个插件输出

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

因此,我的文件夹结构基本如下:

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

核心\bin\debug 对我来说,这看起来像是一个VisualStudio bug,但也许我忽略了某些选项。有没有办法解决这个问题


PS:我知道这不是一个关键问题,因为一切都可以正常构建和工作,但是我不喜欢无意义的文件夹挂在周围,而不是更改插件的输出位置,你可以做的是为插件创建一个构建后脚本(Properties\build Events选项卡),将它们复制到核心文件夹。这将防止与输出文件夹混淆

此命令行应为您提供以下功能:

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)值。

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

您的命令行不会复制可能存在问题的.pdb.config文件(无法正确调试)。使用$(OutDir)是非常错误的,因为它引用的是当前项目而不是Core的项目。此外,这实际上会复制很多文件。对于所有依赖于核心的插件,这意味着核心程序集(及其自身的依赖项)将复制到每个插件输出文件夹中。使用$(OutDir)假定您为两个生成项目设置了相同的目标目录(通常为“\bin\Debug”)。如果不是这样的话,您将不得不对其进行硬编码。第二条评论:这不会复制plugin.dll以外的任何内容。它会将它们复制到核心库,而不是将核心二进制文件复制到插件路径。当VisualStudio构建插件时,它会将核心“导入”到插件的输出文件夹中。可以做的是将所有插件引用(当然包括核心)的“Copy local”设置为false。那会有用的,我试过了。但宏不能在输出路径中使用。构建时,它将创建目录“$(SolutionDir)”。