2 回答
TA贡献1852条经验 获得超1个赞
关于为什么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 调试行为,因此请在调试时将所有内容保留为正常结构。并在尝试释放时使用特殊结构。
TA贡献1811条经验 获得超5个赞
不要使用ROBOCOPY
,而是更改项目的实际构建位置。
转到Project -> Properties -> Build
并将输出路径更改为/Debug/x86/bin
。
然后应该可以正确调试。
- 2 回答
- 0 关注
- 133 浏览
添加回答
举报