wpf 为什么要添加到GAC.DLL已经在exe文件夹中给出

0pizxfdo  于 2023-01-02  发布在  其他
关注(0)|答案(2)|浏览(154)

我写了一个 shell 扩展在C#.应用程序显示WPF对话框,我使用Xaml.行为当我运行应用程序.所有其他DLL都找到了.(相同的文件夹作为exe)但应用程序抛出一个异常,因为缺少Microsoft.Xaml.Behaviors.dll(但实际上是在同一文件夹中)
所以我运行:gacutil.exe/i ...\bin\Debug\Microsoft.Xaml.Behaviors.dll这修复了我的问题。
我的问题是为什么找到其他的dll而不是xmal_behaviors?
是否可以跳过GAC步骤?
更新:

  • 是。行为被nuget包引用。
  • 主进程为explorer.exe
ukxgm1gy

ukxgm1gy1#

尝试在项目中添加对DLL的引用,并将“复制本地”属性设置为true。这将导致DLL在生成时复制到应用程序的输出目录,并在运行时从该位置加载。

plupiseo

plupiseo2#

行为现在作为一个核心包提供。
使用它们的方法是管理Nuget包,找到Microsoft.Xaml.Behaviors.wpf并“安装”它。
例如

然后,您需要在视图中使用xmlns。

xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

以及一个示例用法:

<TextBox Text="{Binding NettPer, StringFormat='{}{0:C}'}" Grid.Column="1">
                    <i:Interaction.Behaviors>
                        <b:SelectAllTextBoxBehavior/>
                    </i:Interaction.Behaviors>

以上是来自一个真实的的解决方案,它被编译到目标。net 6,没有机器GAC中的行为dll也能正常工作。
如果这不起作用,那么可能是由于不兼容。AFAIK微软的建议仍然是不要在托管代码中编写 shell 扩展。我找不到当前的链接,但以下是截至2018. https://learn.microsoft.com/en-us/previous-versions/windows/desktop/legacy/dd758089(v=vs.85)

相关问题