从主项目中查找类库的资源

用户

问题

我的解决方案由几个项目组成。UI的主要部分称为“助手”,后端称为“ AssistantLib”。

结构如下:

在此处输入图片说明

在AssistantLib我已经包括了PDF文件作为一个资源的资源文件夹具有Build Action内容,并Copy to Output Directory作为一直拷贝我可以在调试时通过使用以下组合找到它们:

    private string GetArtifactPath(string artifactName)
    {
        return Path.Combine(GetResourcePath(), artifactName);
    }

    public static string GetResourcePath()
    {
        return Path.Combine(Directory.GetCurrentDirectory(), "Resources");
    }

这有效。从GetArtifactPath返回字符串后,我用Process打开文件AcroRd32.exe

Note that I need to reference these files by their file paths. They're not simple txts to read or stream. I also need to be able to open them with certain flag provided by AcroRd32.exe. That means I must have the file path.

The problem I'm having as that once I publish the ClickOnce app, I receive an error that the file couldn't be found:

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)

And of course, when I go to that location, the resources aren't there.

What I've Tried

  • I've changed the Build Action to Embedded Resource & None - same result
  • I've changed the Copy Output Directory to Do Not Copy
  • This doesn't apply because I can't stream these resources, they're not simple text files. I'm also not trying to read them, I'm trying to open them.
  • This also doesn't apply because referencing MyNamespace.Properties.Resources.My_Zip_File; doesn't work in my situation. I don't know the name of the resource ahead of time.

Update

I am looking into post-build events. In doing so, I found that these resources are already in the output directory following a build:

在此处输入图片说明

But for some reason they don't show up when I publish:

在此处输入图片说明

Update 2

To illustrate how the folder structure affects this, here are before and afters.

When a Resource is in AssistantLib (e.g. EVMSBP), this is the structure:

库中的资源

And here is what the ClickOnce publish folder looks like after installing with the resource in AssistantLib:

失踪

Alternatively, when a Resource is in Assistant (again EVMSBP), this is the structure:

助理资源

And here's what the ClickOnce publish folder looks like after installing with the resource in Assistant:

不容错过

From what I can tell, the Resource MUST be a part of the Startup project. That sounds like insanity?

What am I missing?

Clint

With more details from the edit, this is how I replicated it

  • In AssistLib project

    • Files in Resources with Build Action as Embedded Resources.
    • Output Type: Class Library (AssistLib.dll)

    • See Solution Structure


  • In AzTech Main Project
    • I referenced the AssistLib.dll
    • Check if the resource (pdf) that I want to load exists in AssistLib.dll
    • Loads the resource
    • Launches the PDF
    • So far so good
    • I Published the App and installed
    • I launched the App from the Icon on the Start Menu
    • 哪个启动作为资源嵌入DLL的PDF


AzTech.cs

var nameOfTheFile = "test.pdf";
ResourceManager.GetResourceInfo(nameOfTheFile);
if (ResourceManager.resourceExists == false)
{ Console.WriteLine("Specified PDF file not found"); return; }

Console.WriteLine("Resouce found in DLL");
ResourceManager.LoadResource(nameOfTheFile);//Will load the pdf in your main project

Process.Start(nameOfTheFile);

 class ResourceManager
 {
        public static bool resourceExists { get; set; } = false;
        private static Stream resourceStream { get; set; }
        public static void GetResourceInfo(string fileNameWithExtension)
        {
            const string pathToResource = "AssistantLib.Resources.Guidelines";

            var assembly = Assembly.Load("AssistantLib");
            //var names = assembly.GetManifestResourceNames();
            var stream = assembly.GetManifestResourceStream($"{pathToResource}.{fileNameWithExtension}");
            if (stream == null)
                return;

            resourceExists = true;

            resourceStream = stream;

        }

        public static void LoadResource(string newFileNameWithExtension)
        {
            if(File.Exists(newFileNameWithExtension))
            {
                Console.WriteLine("File already exists");
                return;
            }
            using (Stream s = File.Create(newFileNameWithExtension))
            {
                Console.WriteLine("Loading file");
                resourceStream.CopyTo(s);
            }
        }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Gradle在主项目中排除特定子项目的插件

来自分类Dev

如何在类库项目中配置实体框架

来自分类Dev

在Windows Phone项目中使用可移植类库

来自分类Dev

NHibernate:如何从单元测试项目中引用主项目的装配?

来自分类Dev

Android Instrumentation测试找不到库项目中的类

来自分类Dev

库和项目中的类名相同

来自分类Dev

如何在VS 2015 RC中将嵌入式资源添加到“类库(包)”项目中?

来自分类Dev

在类库项目中进行统一的依赖注入

来自分类Dev

System.Windows.Interactivity必须在主项目中引用

来自分类Dev

notepad ++在项目中查找PHP资源

来自分类Dev

如何在Android主项目中包含库项目中使用的AAR文件

来自分类Dev

在主项目中找不到链接到Cocoapod的静态框架

来自分类Dev

调用API的类库在特定项目中不起作用

来自分类Dev

除非Url在主项目中,否则NoReverseMatch

来自分类Dev

Pod可以访问主项目中的框架吗?

来自分类Dev

C#-MVC-有关将类库项目引用到主项目的问题

来自分类Dev

SVN将不同的项目合并到一个主项目中

来自分类Dev

添加库项目并在主项目中使用它

来自分类Dev

类库可以使用存储在主项目中的函数吗?

来自分类Dev

将导航栏集成到主项目中(ANDROID STUDIO)

来自分类Dev

兄弟项目中的码头资源库

来自分类Dev

Java库(.jar),具有Android项目中的资源

来自分类Dev

如何在Android主项目中包含库项目中使用的AAR文件

来自分类Dev

将数据从Android库发送到主项目活动

来自分类Dev

将两个单独的项目/ Git仓库合并到一个主项目中?

来自分类Dev

在Clojure项目中编译资源

来自分类Dev

如何在子项目中选择任务的行(在主项目中)

来自分类Dev

除非在主项目中使用,否则静态库中的链接错误

来自分类Dev

某些企业库依赖项不会复制到主项目中

Related 相关文章

  1. 1

    Gradle在主项目中排除特定子项目的插件

  2. 2

    如何在类库项目中配置实体框架

  3. 3

    在Windows Phone项目中使用可移植类库

  4. 4

    NHibernate:如何从单元测试项目中引用主项目的装配?

  5. 5

    Android Instrumentation测试找不到库项目中的类

  6. 6

    库和项目中的类名相同

  7. 7

    如何在VS 2015 RC中将嵌入式资源添加到“类库(包)”项目中?

  8. 8

    在类库项目中进行统一的依赖注入

  9. 9

    System.Windows.Interactivity必须在主项目中引用

  10. 10

    notepad ++在项目中查找PHP资源

  11. 11

    如何在Android主项目中包含库项目中使用的AAR文件

  12. 12

    在主项目中找不到链接到Cocoapod的静态框架

  13. 13

    调用API的类库在特定项目中不起作用

  14. 14

    除非Url在主项目中,否则NoReverseMatch

  15. 15

    Pod可以访问主项目中的框架吗?

  16. 16

    C#-MVC-有关将类库项目引用到主项目的问题

  17. 17

    SVN将不同的项目合并到一个主项目中

  18. 18

    添加库项目并在主项目中使用它

  19. 19

    类库可以使用存储在主项目中的函数吗?

  20. 20

    将导航栏集成到主项目中(ANDROID STUDIO)

  21. 21

    兄弟项目中的码头资源库

  22. 22

    Java库(.jar),具有Android项目中的资源

  23. 23

    如何在Android主项目中包含库项目中使用的AAR文件

  24. 24

    将数据从Android库发送到主项目活动

  25. 25

    将两个单独的项目/ Git仓库合并到一个主项目中?

  26. 26

    在Clojure项目中编译资源

  27. 27

    如何在子项目中选择任务的行(在主项目中)

  28. 28

    除非在主项目中使用,否则静态库中的链接错误

  29. 29

    某些企业库依赖项不会复制到主项目中

热门标签

归档