我在visual studio的项目文件夹中有一个图像文件,它被设置为构建动作"资源"所以它包含在我的exe文件中。 我可以在xaml链接到这个文件没问题,例如< .Image Source =" images / myimage.png">它有效。
但是如果我尝试使用File.exists(" images / myimage.png")来检查文件的存在,它总是返回false。我在这做错了什么?
答案 0 :(得分:6)
如果您不想将其捆绑到输出文件夹中 - 您不必执行任何操作。它是构建到您的exe,不需要检查。永远都是真的。
好的,我理解,因为您动态构建了要检查它的嵌入式资源的名称。
见这里:WPF - check resource exists without structured exception handling
他们基本上会检查Assembly.GetExecutingAssembly().GetManifestResourceNames()
您可以将其作为起点。但请注意,资源名称不是 images / myimage.png ,而是从您的命名空间构建,如 YourApp.images.myimage.png 。您可能希望从该答案中查看构建的resourceNames数组的内容。
答案 1 :(得分:2)
您是否已将“复制到输出”属性设置为“始终”?并确保使用正确的路径。可以使用以下代码检测执行程序集的路径:
private string GetExecutingAssemblyPath()
{
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);
}
干杯。
答案 2 :(得分:1)
<强> Xamarin.Forms 强>
从工作代码中检查共享项目中嵌入资源中是否存在自动生成的文件名(如此处所述https://developer.xamarin.com/guides/xamarin-forms/user-interface/images/#Embedded_Images)
var assembly = typeof(App).GetTypeInfo().Assembly;
var AssemblyName = assembly.GetName().Name;
var generatedFilename = AssemblyName+".Images.flags.flag_" + item.CountryCode?.ToLower() + @".png";
bool found = false;
foreach (var res in assembly.GetManifestResourceNames())
{
if (res == generatedFilename)
{
found = true;
break;
}
}
if (found) UseGeneratedFilename();
else UseSomeOtherPlaceholderImage;