Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在已发布的WinForm应用程序中从\bin\x64\Release加载pdf文件?_C#_Winforms_Visual Studio_File_Pdf - Fatal编程技术网

C# 如何在已发布的WinForm应用程序中从\bin\x64\Release加载pdf文件?

C# 如何在已发布的WinForm应用程序中从\bin\x64\Release加载pdf文件?,c#,winforms,visual-studio,file,pdf,C#,Winforms,Visual Studio,File,Pdf,我在做什么?我想向Windows窗体应用程序添加帮助文件。我将pdf添加到项目中的文件夹中,并将属性Copy to Output Directory设置为Copy Always。这将导致文件复制到bin中的Debug和Release目录。当我运行应用程序时,这在调试模式下非常有效 有什么问题?这在生产版本上不起作用。我只针对x64操作系统。pdf正在复制到bin/x64/Release,但加载时会崩溃 这就是我加载pdf的方式 string filePath = @"HelpFiles\File

我在做什么?我想向Windows窗体应用程序添加帮助文件。我将pdf添加到项目中的文件夹中,并将属性Copy to Output Directory设置为Copy Always。这将导致文件复制到bin中的Debug和Release目录。当我运行应用程序时,这在调试模式下非常有效

有什么问题?这在生产版本上不起作用。我只针对x64操作系统。pdf正在复制到bin/x64/Release,但加载时会崩溃

这就是我加载pdf的方式

string filePath = @"HelpFiles\File.pdf";
Process.Start(Path.Combine(Application.StartupPath, filePath));

您知道如何让程序将文件加载到生产版本吗?

假设您有一个固定的pdf文件,您只需将该文件添加到您的项目中即可。 然后,您将以
字节[]
的形式访问该文件。使用

String tmpPdfFilePath = Path.Combine(Path.GetTempPath(), String.Format("{0}.pdf", Path.GetTempFileName()));
File.WriteAllBytes(tmpPdfFilePath, Properties.Default.PdfFile);
Process.Start(tmpPdfFilePath);
唯一的缺点是,每次都将文件复制到
temp
dir。您可以通过使用静态文件名而不是
Path.GetTempFile()
来解决这个问题。检查文件是否存在,并根据需要将其复制到临时文件

使现代化 如果将文件作为ressource添加到默认ressource文件中的项目中,则可以使用

Properties.Resources.FileName

您是否尝试过打开项目的属性,在“发布”选项卡下,打开应用程序文件…,并包括您的“帮助文件\文件.pdf

类似的

然后尝试发布它


编辑:ClickOnce安装的所有文件/程序都应包含在应用程序文件中。。。并将pdf文件的操作属性从“无”改为“内容”。

在哪里安装程序?您的代码尝试从相对于当前位置的文件夹加载PDF。通常,它是程序运行的文件夹,除非您对其进行了更改。所以它是\helpfiles\file。pdf@Steve该程序从“C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\CompanyName”文件夹运行,但即使我对其进行硬编码,它也无法运行。您只需确保,相对于您的run文件夹,itI中有一个名为HelpFiles的子文件夹,其中包含.pdf文件。我将尝试使用它。什么是Path.GetTempFile(),资源中的文件名?哦,对不起,输入错误。我将更新答案
Path.GetTempFileName()
。这只是从windows检查中获取临时文件的文件名,也不确定Properties.Default.PdfFile。WriteAllText方法的重载要么使用字节[],要么使用字符串[],要么使用字符串或IEnumerable。如果我是从内存中编写的,我现在离visual studio还差得远。如果使用提供的链接添加文件,则该文件应类似于
Properties.Default.FileName
Properties.Ressources.FileName
。我明天会在办公室检查这个问题并更新我的答案。好的,谢谢。我已经解决了这个问题,但我认为你仍然应该编辑答案。看到不同的方法总是好的。你是对的!它不在应用程序文件中,因此ClickOnce不会随程序一起安装。要包含,我只需将pdf文件的Build Action属性从None更改为Content。如果你在回答中包括这一点,我会接受的。谢谢我很高兴它能工作!我在想为什么它会在你的产品版本上崩溃,是因为你有一个不同的操作系统。编辑完毕。:)