Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Dotnet CORE 3.1 -访问关联项目库中的嵌入式资源(文件)

Dotnet CORE 3.1 -访问关联项目库中的嵌入式资源(文件)
EN

Stack Overflow用户
提问于 2020-01-02 09:35:58
回答 1查看 6.6K关注 0票数 5

我一直在关注关于嵌入式资源的THIS小教程。它是由Derek Comartin编写的,它处理了将嵌入式资源添加到.csproj文件中的简单操作。

很好。按照他的指示去做了,但是我在resourceStream中得到了null。有几个问题没有将你的资源设置为属性中的“嵌入式资源”,但我做了所有的事情。

以下是资源属性:

我的解决方案有相当多的项目组成,包括一个主项目或启动项目。我想要用作嵌入式资源的资源或JSON文件在初始化项目中,该项目是一个DotNet核心库项目,而不是启动项目。

我遵循了关于查找名称等的建议,使用:

代码语言:javascript
运行
AI代码解释
复制
var resourceNames = assembly.GetManifestResourceNames();

这表明它甚至不可用,因此我得到了资源流的"null“。

下面是我访问嵌入式资源的代码。

代码语言:javascript
运行
AI代码解释
复制
    public void CATALOGInitialiseSuburbs(CATALOGContext context)
    {
        var assembly = Assembly.GetEntryAssembly();

        var resourceNames = assembly.GetManifestResourceNames();

        var resourceStream = assembly.GetManifestResourceStream("EmbeddedResource.SUBURB.Initialisations.SuburbJSON.australianSuburbs.json");


        using (var reader = new StreamReader(resourceStream, Encoding.UTF8))
        {
            var list = reader.ReadToEndAsync();
        }
    }

下面是我的csproj文件,用于包含嵌入式资源的项目。

代码语言:javascript
运行
AI代码解释
复制
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <ApplicationIcon />
    <Win32Resource />
  </PropertyGroup>

  <ItemGroup>
    <None Remove="SUBURB.Initialisations\SuburbJSON\australianSuburbs2019-08.json" />
    <None Remove="SUBURB.Initialisations\SuburbJSON\australian_postcodes 2019.csv" />
  </ItemGroup>

  <ItemGroup>
    <EmbeddedResource Include="SUBURB.Initialisations\SuburbJSON\australianSuburbs2019-08.json" />
    <EmbeddedResource Include="SUBURB.Initialisations\SuburbJSON\australian_postcodes 2019.csv" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\JobsLedger.AUTHORISATION\JobsLedger.AUTHORISATION.csproj" />
    <ProjectReference Include="..\JobsLedger.CATALOG.ENTITIES\JobsLedger.CATALOG.ENTITIES.csproj" />
    <ProjectReference Include="..\JobsLedger.CATALOG\JobsLedger.CATALOG.csproj" />
    <ProjectReference Include="..\JobsLedger.DATA\JobsLedger.DATA.csproj" />
  </ItemGroup>

</Project>

这是我的主项目的csproj文件...

代码语言:javascript
运行
AI代码解释
复制
<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
        <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
    </PropertyGroup>


    <ItemGroup>
        <PackageReference Include="FluentValidation" Version="8.6.1" />
        <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.0" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="3.1.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0">
          <PrivateAssets>all</PrivateAssets>
          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>
        <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="5.6.0" />
        <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.0" />
    </ItemGroup>


    <ItemGroup>
      <ProjectReference Include="..\JobsLedger.AUTHORISATION\JobsLedger.AUTHORISATION.csproj" />
      <ProjectReference Include="..\JobsLedger.CATALOG\JobsLedger.CATALOG.csproj" />
      <ProjectReference Include="..\JobsLedger.DATA\JobsLedger.DATA.csproj" />
      <ProjectReference Include="..\JobsLedger.INITIALISATION\JobsLedger.INITIALISATION.csproj" />
      <ProjectReference Include="..\JobsLedger.TESTDATA\JobsLedger.TESTDATA.csproj" />
    </ItemGroup>


    <Target Name="DebugRunWebpack" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('wwwroot\dist') ">
        <!-- Ensure Node.js is installed -->
        <Exec Command="node --version" ContinueOnError="true">
            <Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
        </Exec>
        <Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />

        <!-- In development, the dist files won't exist on the first run or when cloning to
                 a different machine, so rebuild them if not already present. -->
        <Message Importance="high" Text="Performing first-run Webpack build..." />
        <Exec Command="npm install" />
        <Exec Command="npm ddp" />
        <Exec Command="npm run webpack:Debug" />
    </Target>

    <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
        <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
        <Exec Command="npm install" />
        <Exec Command="npm ddp" />
        <Exec Command="npm run webpack:$(Configuration)" />

        <!-- Include the newly-built files in the publish output -->
        <ItemGroup>
            <!-- First, clean up previously generated content that may have been removed. -->
            <ContentWithTargetPath Remove="@(ContentWithTargetPath)" Condition="!Exists('%(Identity)')" />
            <_WebpackFiles Include="wwwroot\dist\**" />
            <ContentWithTargetPath Include="@(_WebpackFiles->'%(FullPath)')" RelativePath="%(_WebpackFiles.Identity)" TargetPath="%(_WebpackFiles.Identity)" CopyToPublishDirectory="Always" />
        </ItemGroup>
    </Target>

</Project>

我非常确定,如果它在主项目中,它会显示出来,但它不在那个项目中。

如何访问子项目(dotnet核心库)中的嵌入式资源?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-02 12:23:16

我发现了这个问题,它表明我可以使用类所在的程序集,然后找到该类中资源的名称。

代码语言:javascript
运行
AI代码解释
复制
string[] resourceNames = this.GetType().Assembly.GetManifestResourceNames();
foreach(string resourceName in resourceNames)
{
    Console.WriteLine(resourceName);
}

在这一点上,看看它捕获了什么,首先给了我访问这个类所在的程序集的知识,更重要的是,它还列出了我在那里拥有的embeddedResource。

所以,这就是我访问资源的方法。

代码语言:javascript
运行
AI代码解释
复制
    var resourceStream = this.GetType().Assembly.GetManifestResourceStream("JobsLedger.INITIALISATION.SUBURB.Initialisations.SuburbJSON.australianSuburbs.json");


    using (var reader = new StreamReader(resourceStream, Encoding.UTF8))
    {
        var list = reader.ReadToEndAsync();
    }

注第一次尝试给出了嵌入式资源所在的完整路径。我用它来创建位置,并通过正确的程序集找到了资源。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59561078

复制
相关文章
dotNet Core 3.1 使用 Elasticsearch
Elasticsearch 是基于 Lucene 的搜索引擎。可以非常方便地实现分布式的全文搜索,本文介绍在 dotNet Core 3.1 中怎样使用 Elasticsearch 。
oec2003
2021/02/19
8140
dotNet Core 3.1 使用 Elasticsearch
dotNet Core 3.1 使用 Aspose (部署 Docker)
在之前的文章《dotNET Core中使用Aspose(部署Docker)》中介绍了在 dotNet Core2.1 中使用 Aspose ,并部署到 Docker 中,现在 dotNET Core 升级到了 3.1 ,Docker 镜像发生了变化,一些依赖的安装也有些变化。
oec2003
2020/11/03
7680
dotnet core 中可爱的代码
刚才看 dotnet core 的源代码例子,发现了一个非常简单的sample 代码:
田春峰-JCJC错别字检测
2019/02/14
3300
asp dotnet core 限制接口只能本机访问的方法
本文告诉大家,如果限制某些 API 接口,只能让本机进行访问,如只能通过 127.0.0.1 调用某个接口的 get 或 post 方法
林德熙
2021/12/24
1.5K0
dotnet core 发布只带必要的依赖文件
在使用 dotnet core 发布独立项目的时候,会带上大量依赖的库,但是通过微软提供的工具可以去掉一些在代码没有用到的库。
林德熙
2019/03/13
1.5K0
dotnet core 发布只带必要的依赖文件
在使用 dotnet core 发布独立项目的时候,会带上大量依赖的库,但是通过微软提供的工具可以去掉一些在代码没有用到的库。
林德熙
2022/08/04
2310
ASP.NET Core 3.1后项目文件与.NET Core2.X的变化异同说明
虽然我们的.NET 6的项目,但是涉及到这里的变化其实从ASP.NET Coe 3.x就变化了。
角落的白板报
2023/03/21
8480
ASP.NET Core 3.1后项目文件与.NET Core2.X的变化异同说明
WPF dotnet core 的 Blend SDK Behaviors 库
之前版本是通过安装 Blend SDK 支持 Behaviors 库的,但是这个方法都是通过引用 dll 的方式,不够优雅。在升级到 dotnet core 3.0 的时候就需要使用 WPF 官方团队开源的 Microsoft.Xaml.Behaviors.Wpf 库代替
林德熙
2022/08/12
3140
dotnet core
.NET Core SDK (5.0.100-preview.1.20155.7) 使用情况: dotnet [runtime-options] [path-to-application] [arguments] 执行 .NET Core 应用程序。 runtime-options: --additionalprobingpath <path> 要探测的包含探测策略和程序集的路径。 --additional-deps <path> 指向其他 deps.json 文件的路径。 --depsfile 指向 <application>.deps.json 文件的路径。 --fx-version <version> 要用于运行应用程序的安装版共享框架的版本。 --roll-forward <setting> 前滚至框架版本(LatestPatch, Minor, LatestMinor, Major, LatestMajor, Disable)。 --runtimeconfig 指向 <application>.runtimeconfig.json 文件的路径。 path-to-application: 要执行的应用程序 .dll 文件的路径。 使用情况: dotnet [sdk-options] [command] [command-options] [arguments] 执行 .NET Core SDK 命令。 sdk-options: -d|--diagnostics 启用诊断输出。 -h|--help 显示命令行帮助。 --info 显示 .NET Core 信息。 --list-runtimes 显示安装的运行时。 --list-sdk
sofu456
2020/05/27
4860
dotNET Core 中怎样操作 AD?
做企业应用开发难免会跟 AD 打交道,在之前的 dotNET FrameWork 时代,通常使用 System.DirectoryServices 的相关类来操作 AD ,在 dotNET Core 中没有这个命名空间,在张善友大佬的推荐下,知道了 Novell.Directory.Ldap。
oec2003
2019/10/08
7600
asp dotnet core 通过图片统计 csdn 用户访问
在 csdn 的访问统计里面,只能用 csdn 提供的访问统计,因为在 csdn 中不支持在博客加上 js 代码,也就是无法使用友盟等工具统计。 通过在 asp dotnet core 创建一个图片链接的方式,将这个链接作为图片放在 csdn 的博客,可以在链接被访问的时候统计用户访问
林德熙
2022/08/04
1.8K0
.NET Core 跨平台资源监控库及 dotnet tool 小工具
CZGL.SystemInfo 是一个支持 Windows 和 Linux 等平台的能够获取机器硬件信息、采集机器资源信息、监控进程资源的库。
痴者工良
2021/04/26
9770
asp dotnet core 提供大文件下载的测试
本文仅仅是提供测试使用的代码 提供文件下载只需要返回 PhysicalFile 方法,如下面代码 [HttpGet] public IActionResult Get() { var folder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var file = Path.Combine(folder, "big file"
林德熙
2020/08/06
1.8K0
dotnet core 和 dotnet Framework 启动可执行文件的差别
在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码。而使用 .NET Core 构建出来的应用,将会包含一个 Exe 可执行文件,和对应的 Dll 文件,而 IL 代码将放在 Dll 文件里面。那么使用 .NET Framework 和使用 .NET Core 所输出的 Exe 可执行文件有什么差别
林德熙
2021/01/18
7480
springboot项目中静态资源的访问
springboot项目中静态资源的根目录是: src/main/resources/static 静态资源如html页面、图片、js、css等 都放在此文件夹或该文件夹的子文件夹下。 比如在sta
贪挽懒月
2018/05/18
1.3K0
dotNET Core:配置
在dotNET Core中默认情况下没有了之前版本的App.config和Web.Config文件,换成了新的json格式的配置文件。当然,如果想使用之前的方式也是可以的。下面说说在dotNET Core中各种使用配置的方法。
oec2003
2019/07/19
6340
dotNET Core:配置
asp dotnet core 通过图片统计 csdn 用户访问 缓存图片统计用户访问
在 csdn 的访问统计里面,只能用 csdn 提供的访问统计,因为在 csdn 中不支持在博客加上 js 代码,也就是无法使用友盟等工具统计。 通过在 asp dotnet core 创建一个图片链接的方式,将这个链接作为图片放在 csdn 的博客,可以在链接被访问的时候统计用户访问
林德熙
2019/06/15
2.1K0
asp dotnet core 支持客户端上传文件
新建一个 asp dotnet core 程序,创建一个新的类,用于给客户端上传文件的信息
林德熙
2019/03/13
6.4K0
EF Core 3.1 入门视频-02 创建数据库
http://mpvideo.qpic.cn/0b7854aacaaay4ajzgdojvpvb36dahxqaaia.f10002.mp4?dis_k=8a3835d77347ec6cd69f594
宿春磊Charles
2022/03/29
3600
微软热门开源项目及代码库地址
非常流行的跨平台代码编辑器,提供全面的编辑和调试支持、可扩展性模型以及与现有工具的轻量级集成。
Edi Wang
2019/07/15
1.8K0
微软热门开源项目及代码库地址

相似问题

在Buildroot中安装Dotnet Core SDK 3.1?

14

ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY on dotnet core 3.1 react项目

19

在本地kubernetes中调试dotnet core 3.1应用

16

无法在dotnet core 3.1中发布单个自包含文件

121

dotnet core 3.1 angular identity server 4视图

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档