问题
我的解决方案由少数几个项目组成。 UI的主要界面称为“助理”,后端称为“ AssistantLib”。
这里是结构:
在AssistantLib中,我将PDF作为资源包含在Resources文件夹中,其中Build Action
为Content,而Copy to Output Directory
为Copy Always。我可以在调试时通过使用以下组合找到它们:
private string GetArtifactPath(string artifactName)
{
return Path.Combine(GetResourcePath(), artifactName);
}
public static string GetResourcePath()
{
return Path.Combine(Directory.GetCurrentDirectory(), "Resources");
}
这有效。从GetArtifactPath返回字符串后,我将使用Process
对象和AcroRd32.exe
打开文件。
请注意,我需要通过文件路径引用这些文件。它们不是读取或流式传输的简单txt。我还需要能够使用AcroRd32.exe
提供的某些标志来打开它们。这意味着我必须具有文件路径。
发布ClickOnce应用后遇到的问题是,收到一个找不到该文件的错误:
Error: Could not find a part of the path 'C:\Users\EL-C\AppData\Local\Apps\2.0\3JCPDD49.7G5\9122AMZE.NZL\azte..tion_edea8654ffceff97_0001.0000_447ed0da08290357\Resources\Guidelines\3.2'.. Stacktrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
当然,当我去那个位置时,资源不在那里。
我尝试过的事情
Build Action
更改为“嵌入式资源”,并且没有-相同的结果Copy Output Directory
更改为“请勿复制”>MyNamespace.Properties.Resources.My_Zip_File;
无效。我不知道资源的名称。更新
我正在研究构建后事件。通过这样做,我发现这些资源在构建后的输出目录中已经
:但是由于某些原因,它们在我发布时不显示:
更新2
为了说明文件夹结构如何影响此效果,在此之前和之后。
[当资源位于AssistantLib
中时(例如EVMSBP),这是结构:
这是在AssistantLib
中安装资源后,ClickOnce发布文件夹的外观:
或者,当资源位于Assistant
中时(同样是EVMSBP),这是结构:
这是在Assistant
中使用资源安装后,ClickOnce publish文件夹的外观:
据我所知,资源必须是Startup项目的一部分。听起来像疯了吗?
我想念什么?
问题我的解决方案由少数几个项目组成。 UI的主要部分称为“助手”,后端称为“ AssistantLib”。这是结构:在AssistantLib中,我有...
当我使用Visual Studio安装程序以exe格式构建项目时,我面临相同的问题,我只需在项目构建输出目录中简单地添加pdf文件。您必须将pdf文件夹复制到bin
或release[不幸的是,答案是将我的资源移到启动项目UI项目中。
有关编辑的更多详细信息,这是我复制的方式