猿问

exe文件没有根目录怎么办?

默认情况下,构建路径\debug\x86\为:

db (folder)
log (folder)
*.exe
*.pdb
*.config

我想将 *.exe(pdb 和 config)移至我的文件夹bin\debug\x86\bin)

我做下一个帖子构建脚本

ROBOCOPY "$(TargetDir) " "$(TargetDir)bin\ " *.exe *.config *.pdb /IS /MOVE

但是当我运行应用程序时崩溃(或start通过 Visual Studio)

该项目包含其他文件夹。所以我想把文件放在不同的文件夹中。

我想要这个结构

db (folder)
log (folder)
bin (folder)


慕工程0101907
浏览 134回答 2
2回答

小怪兽爱吃肉

关于为什么VS抛出该错误消息并且无法在VS中启动程序:对于VS中的C#项目,它有默认的Output path,就像Larry上面建议的那样,当我们尝试简单地启动或开始调试程序时,VS会根据.exe调用输出xx.exe TargetDir。由于您使用构建后事件将输出 xx.exe 从 移动$(TargetDir)到$(TargetDir)bin,每次 VS 尝试启动该程序时,它都找不到程序,因为它实际上不在 $(TargetDir) 路径中。注意:在使用 msbuild 构建时,$(OutputPath)和$(TargetDir)指的是相同的路径。我想将 *.exe(pdb 和 config)移动到我的文件夹 bin (\debug\x86\bin)对于 VS 中的 C# 项目,不建议这样做。我假设你当前的项目中可能有 log 和 db 文件夹,如果其中的文件设置为 Content build action 和 CopyAlways 或 CopyIfNever,那么无论你设置什么输出路径,输出结构都是这样的:无需在当前路径创建新的 bin 文件夹并将其移入*.exe, *.pdb, *.config其中。它会影响VS中的正常调试行为,如果xx.exe依赖于db文件夹中的数据库,还可能导致未知错误。(更改路径后,xx.exe可能会尝试在错误的路径中搜索)不确定你用的VS是什么版本,可以查看这个issue。msbuild是VS中的构建引擎,VS使用它来构建C#项目。您可以在您的机器中找到它的路径并检查其典型结构: --Msbuild.exe| --necessary files| --referenced assemblies| --other folders综上所述,使用post-build脚本会调用崩溃,导致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您需要注意的是确保您的程序可以像这样找到所需的文件。由于您可能通过代码依赖这些文件,因此一个简单的示例是使用以下格式的路径:@"..\text\test.txt",这..意味着上面的目录。因此,如果您使用类似的语句@"..\db\database file",您的程序可以找到必要的文件。但请注意,这种方式会影响 noraml 调试行为,因此请在调试时将所有内容保留为正常结构。并在尝试释放时使用特殊结构。

四季花海

不要使用ROBOCOPY,而是更改项目的实际构建位置。转到Project -> Properties -> Build并将输出路径更改为/Debug/x86/bin。然后应该可以正确调试。
随时随地看视频慕课网APP
我要回答