【发布时间】:2020-06-30 11:00:28
【问题描述】:
假设您在名为 App 的 C# 应用程序中有一个名为 Res 的目录,并且在该目录中您有 icon.png,您可能会将其标记为EmbeddedResource 并在运行时访问它,以便为您的应用程序提供一个图标,代码如下:
var assembly = System.Reflection.Assembly.GetEntryAssembly();
var resourceAppIcon = assembly.
GetManifestResourceStream( "App.Res.icon.png" );
// Prepare icons
if ( resourceAppIcon != null ) {
this.appIconBmp = new Bitmap( resourceAppIcon );
this.Icon = Icon.FromHandle( this.appIconBmp.GetHicon());
}
...等等。
此代码以前可以运行,但由于我更改为 JetBrains Rider,它突然停止运行。尽管资源仍然是嵌入的,但它们的名称已从 namespace.directory.resource_name 更改为 namespace.resource_name。为了访问图标,我现在必须写:
var resourceAppIcon = assembly.
GetManifestResourceStream( "App.icon.png" );
这是预期的吗?只是和Rider有关吗?也许与 dotnetcore 带来的新时代有关?我一直在努力寻找有关此的文档,但没有任何运气。
已编辑:我已尝试使用 CLI 使用 dotnetcore,然后资源名称符合预期。这似乎是 Mono 的问题?
【问题讨论】:
-
您提到了 Rider 和 .NET Core。这会在 Visual Studio 中重现吗?还是您在切换到 Rider 时也碰巧升级到了 .NET Core?
-
您的 CSProj 包括资源的情况如何?
-
FWIW,可以在 Visual Studio 中正常工作,但请注意,在 Visual Studio 中,项目中有默认命名空间的概念,通常是项目名称,但可以更改。如果改变了,资源路径也会改变。
-
@zastrowm,我不知道,我不能使用 Visual Studio,因为我不使用 Windows。我使用的不是 dotnetcore,而是 .NET 框架。
-
@zastrowm,我让项目使用默认的嵌入资源信息:
...我知道我可以在里面使用 LogicalName 节点,这可以解决问题,但我想在此之前了解原因。
标签: c# .net mono embedded-resource rider