我无法找出适用于我的资源的相对路径。我已经尝试了我能想到的一切。唯一有效的是绝对路径,它只在我的系统上是正确的,但在任何已部署的版本中都是不正确的。
据我所知,这条非常简单的路径应该可行。
public class GreyscaleEffect : ShaderEffect
{
private static PixelShader _pixelShader = new PixelShader()
{ UriSource = new Uri("/Effects/Greyscale.ps", UriKind.Relative) };
为此我收到错误 'FSR.WPF.Utilities.UI 的类型初始值设定项。 GreyscaleEffect' 抛出异常。
内部异常:找不到资源 'effects/greyscale.ps'。
我还尝试了以下方法:
Uri(";component/Effects/Greyscale.ps", UriKind.Relative)
Uri("/;component/Effects/Greyscale.ps", UriKind.Relative)
Uri("/FSR.WPF.Utilities.UI;component/Effects/Greyscale.ps", UriKind.Relative)
在其他地方(在 MUSUI 的 xaml 文件中),使用了以下路径,并且工作正常:
<Image Source="/FSR.WPF.Utilities.UI;component/assets/CurrencyFlags/USD.png"
所以我想不通为什么这个如此相似的案例不起作用。
只有以下绝对路径有效:
Uri("C:\TFS\MUS 6.1.x\Mosaic Middleware\FSR.WPF.Utilities\FSR.WPF.Utilities.UI" +
"\Effects\Greyscale.ps")
我还尝试了上述所有方法,包括在字符串前面使用 @
、使用 UriKind.Absolute 以及完全省略第二个参数的所有组合。除了绝对路径,什么都行不通,我正在失去理智。
这是解决方案结构。主要项目是 MUSUI,在底部以粗体显示。此效果类和 .ps 文件均位于 Effects 文件夹中,该文件夹位于引用的程序集 FSR.WPF.Utilities.UI 的根目录中。
无论如何,我知道这必须以某种方式起作用。任何能够找出可能的最短工作相对路径的人,特别是如果它不需要在程序集名称中进行硬编码,就可以获得奖励。
最佳答案
您不能指定相对 URI,它必须是绝对的。当您在 XAML 中指定相对 URI 时,它实际上会使用 IUriContext.BaseUri
转换为绝对 URI。 ,但在 C# 代码中没有关于当前位置的信息,因此您不能使用相对 URI。
您需要使用 pack://
URI scheme 指定 URI :
UriSource = new Uri("pack://application:,,,/YourAssembly;component/Effects/Greyscale.ps");
关于c# - 相对 SourceURI 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342834/