Je n'arrive pas à trouver un chemin relatif qui fonctionne pour ma ressource. J'ai essayé tout ce que je pouvais penser. La seule chose qui fonctionne est un chemin absolu qui est seulement correct sur mon système, mais serait incorrect dans n'importe quelle version déployée. Pour autant que je sache, ce chemin très simple devrait fonctionner.SourceURI relative ne fonctionne pas
public class GreyscaleEffect : ShaderEffect
{
private static PixelShader _pixelShader = new PixelShader()
{ UriSource = new Uri("/Effects/Greyscale.ps", UriKind.Relative) };
Pour que je reçois l'erreur The type initializer for 'FSR.WPF.Utilities.UI. GreyscaleEffect' threw an exception.
Exception interne: Cannot locate resource 'effects/greyscale.ps'.
J'ai aussi essayé les éléments suivants:
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)
Ailleurs (dans un fichier XAML dans MUSUI), le chemin suivant est utilisé, et cela fonctionne bien:
<Image Source="/FSR.WPF.Utilities.UI;component/assets/CurrencyFlags/USD.png"
Donc je ne peux pas comprendre pourquoi ce cas, qui est si semblable, ne fonctionne pas.
Seul le chemin absolu suivant fonctionne:
Uri("C:\TFS\MUS 6.1.x\Mosaic Middleware\FSR.WPF.Utilities\FSR.WPF.Utilities.UI" +
"\Effects\Greyscale.ps")
J'ai aussi essayé tous les ci-dessus avec toutes les combinaisons d'utilisation @
devant la chaîne, en utilisant UriKind.Absolute, et en laissant le second paramètre tout à fait. Rien ne fonctionne mais le chemin absolu et je perds la tête.
Voici la structure de la solution. Le projet principal est MUSUI, en bas en gras. Cette classe d'effets et le fichier .ps se trouvent tous deux dans le dossier Effects qui se trouve à la racine d'un assembly référencé FSR.WPF.Utilities.UI.
Quoi qu'il en soit, je sais que cela doit travailler en quelque sorte. Toute personne capable de déterminer le chemin relatif le plus court possible, en particulier si elle ne nécessite pas de codage en dur dans le nom de l'assembly, obtient le prix.
Soufflé à l'esprit. L'utilisation de ce chemin l'a corrigé. Maintenant, dans le cas où le nom de l'assembly de cette bibliothèque d'utilitaires change, existe-t-il un moyen de formater ce chemin tel qu'il utilise l'assembly auquel appartient la classe actuelle, puisque GreyscaleEffect.cs et Greyscale.ps seront toujours dans le même endroit? – Alain
@Alain, oui, vous pouvez utiliser 'Assemblée.GetExecutingAssembly() 'pour obtenir l'assemblage actuel –
Ohh j'adore la façon dont Intellisense rate ça, ça ne le sent pas du tout, rien ne dit que tous ceux qui sont tombés dans ce piège (selon leur chance) perdront quelques heures à revérifier et solutions de contournement d'essai jusqu'à atteindre cette solution. TY TY TY! C'est SPARTASOFT !!! pas Microsoft – EpiGen