关于为什么 VS 抛出该错误消息而您无法启动程序
在 VS 中:
对于 VS 中的 C# 项目,它有默认的Output path,就像上面 Larry 建议的那样,当我们尝试简单地启动或调试程序时,VS 将调用输出 xx.exe根据TargetDir。由于您使用构建后事件将输出 xx.exe 从 $(TargetDir) 移动到 $(TargetDir)bin,因此每次 VS 尝试启动程序时,它都不会找到程序,因为它实际上不在 $(TargetDir)路径。
注意:$(OutputPath) 和 $(TargetDir) 在 msbuild 构建时指的是同一路径。
我想将 *.exe(pdb 和配置)移动到我的文件夹 bin
(\debug\x86\bin)
对于 VS 中的 C# 项目,不建议这样做。我假设您当前项目中可能有 log 和 db 文件夹,如果其中的文件设置为 Content build action 和 CopyAlways 或 CopyIfNever,那么无论您设置什么输出路径,输出结构都是这样的:
无需在当前路径创建新的 bin 文件夹并将*.exe, *.pdb, *.config 移动到其中。它会影响 VS 中的正常调试行为,如果 xx.exe 依赖于 db 文件夹中的数据库,也可能会导致未知错误。 (更改路径后,xx.exe可能会尝试在错误路径中搜索)
不确定你用的是什么VS版本,可以查看this issue。 Msbuild 是 VS 中的构建引擎,vs 用它来构建 C# 项目。您可以在您的机器中找到它的路径并检查其典型结构:
--Msbuild.exe
|
--necessary files
|
--referenced assemblies
|
--other folders
总而言之,使用构建后脚本会调用崩溃导致 VS 找不到 xx.exe。并且没有有效的方法来获得您想要的结构,因为原始结构是 VS 对于 C# 项目的预期行为。所以也许我们可以让它在正常情况下它应该是。
更新:
如果我现在想发布程序。当然,现在我以发布模式构建程序。输出结构为:
RootDir(name:xxx) ---xx.exe
---xx.config
---log folder
---log file
---text folder
---txt file
---db folder
---db file
根据您的要求,为什么不创建一个新的 bin 文件夹并将 xx.exe、xx.config 放入其中。然后重命名根文件夹的名称,手动更改为:
ProgramName ---bin folder
---xx.exe
---xx.config
---other referenced assemblies
---log folder
---log file
---text folder
---txt file
---db folder
---db file
您需要注意的是确保您的程序可以找到所需的文件,例如this。由于您可能通过代码依赖这些文件,因此一个简单的示例使用这种格式的路径:@"..\text\test.txt",.. 表示上述目录。所以如果你使用@"..\db\database file"这样的语句,你的程序可以找到必要的文件。
但请注意,这种方式会影响 noraml 调试行为,因此在调试时请保持所有正常结构。并在尝试释放时使用特殊结构。