【问题标题】:Can't find folder after publish app发布应用后找不到文件夹
【发布时间】:2017-06-17 01:14:31
【问题描述】:

我有 C# 控制台应用程序,我有这段代码:

var rootDirectory = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()));

var img = $@"Content\\{screenName}.png";
Console.WriteLine(Path.Combine(rootDirectory, img));

当然,我的解决方案中有 Content 文件夹,其中有我的图像。它在我运行调试时检索这些图像,但在发布应用程序后,应用程序正在搜索该文件夹

C:\Users\用户名\AppData\Local\Apps\2.0\KRWNP492.QP2\Content\name.png

考虑到KRWNP492.QP2 内部没有任何名为Content 的文件夹

我无法更改安装该应用程序的文件夹。错误是:

System.ArgumentException:参数无效。 在 System.Drawing.Bitmap..ctor(字符串文件名) 在 X.Common.CommonMethods.IsExpectedScreen(Bitmap currentScreen, String screenName)

我能做什么?

【问题讨论】:

  • 那么,您也想发布内容吗?还是要将图像嵌入文件中?
  • 是的,我希望将该文件夹(以及文件夹内的图像)发布到将安装我的应用程序的文件夹中
  • 如果您右键单击图像并选择属性,您应该能够设置内容类型,以及是否应该将它们复制到您的输出目录。不确定这是否会影响发布。也许你已经有了那套?
  • 我也这样做了,但我的问题是应用程序正在搜索它不是的 Content 文件夹(在 appdata 内..)
  • @mm8 没问题

标签: c# console-application


【解决方案1】:

应用程序编译后没有“解决方案”目录。有一个可执行文件 (.exe) 和一些图像文件。

您应该做的是在 Visual Studio 的属性窗格中将图像文件的 Build Action 属性设置为“Content”,并将 Copy To Output Directory 属性设置为“Copy if newer”。这应该确保在构建应用程序时将 Content 目录和图像复制到输出目录。

然后您可以使用 相对 路径在运行时查找您的图像:

string path = $"Content\\{screenName}.png";
System.Drawing.Bitmap b = new System.Drawing.Bitmap(path); 

确保将包含图像的 Content 文件夹与 .exe 一起复制到部署目录。

【讨论】:

  • 我不能在发布时自动将那个文件夹复制到部署目录中吗?
  • 这取决于您的部署方式,但这是另一回事。
【解决方案2】:

只需使用System.Reflection.Assembly.GetEntryAssembly().Location; 即可检索应用程序的路径。

【讨论】:

  • 当我在调试中写入当前文件夹是 solution/bin/debug/appname.exe 并且使用我的方法是解决方案文件夹时,我有 content 文件夹
  • 问题不在于应用程序的位置。这就是为什么内容不是 OP 所期望的。再次仔细阅读问题。
【解决方案3】:

您应该能够使用 StartupPath 属性轻松获取目录。

var rootDirectory = Application.StartupPath;

【讨论】:

  • 调试时的启动路径是 bin/debug 文件夹,我在解决方案文件夹中有那个文件夹..
  • 问题不在于启动路径。这就是为什么内容不是 OP 所期望的。再次仔细阅读问题。
猜你喜欢
  • 1970-01-01
  • 2013-11-27
  • 2014-05-11
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多