【问题标题】:Same type-name exists in both Aero and Aero2Aero 和 Aero2 中存在相同的类型名称
【发布时间】:2022-06-10 19:05:07
【问题描述】:

我正在使用出色的升级辅助工具将几个项目从 .net 框架 4.7.2 更新到 .net6。有时我会收到此错误:

错误 CS0433 类型“SystemDropShadowChrome”存在于“PresentationFramework.Aero, Version=6.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 和 'PresentationFramework.Aero2, Version=6.0.2.0, Culture=neutral , PublicKeyToken=31bf3856ad364e35'

这总是发生在 .xaml 文件中,并且总是发生在 Aero 和 Aero2 包中。这些都被 Microsoft.WindowsDesktop.App.WPF (C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.4) 框架引用,升级助手添加升级时到我的项目。

当然,我无法从我的项目中删除 Microsoft.WindowsDesktop.App.WPF 框架,但是阅读有关错误 CS0433 的信息提示我应该有一种方法可以在包之间进行选择。除了我不知道怎么做..

谁能帮帮我?

【问题讨论】:

    标签: c# upgrade uwp-xaml .net-6.0


    【解决方案1】:

    您能否展示一些您使用过SystemDropShadowChrome 的示例代码?

    因为通常命名空间在 xaml 文件中被声明为这样的命名空间: xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2"

    我遇到了同样的问题(但我在代码隐藏中使用了SystemDropShadowChrome),解决方案是这个解决方法:https://github.com/dotnet/wpf/issues/765#issuecomment-555163388

    您需要修改您的.csproj-文件如下:

    1. 添加此属性组并选择您要选择的主题(例如Aero2
    <PropertyGroup>
        <ReferenceWpfAeroTheme>false</ReferenceWpfAeroTheme>
        <ReferenceWpfAero2Theme>true</ReferenceWpfAero2Theme>
        <ReferenceWpfAeroLiteTheme>false</ReferenceWpfAeroLiteTheme>
        <ReferenceWpfClassicTheme>false</ReferenceWpfClassicTheme>
        <ReferenceWpfLunaTheme>false</ReferenceWpfLunaTheme>
        <ReferenceWpfRoyaleTheme>false</ReferenceWpfRoyaleTheme>
    </PropertyGroup>
    
    1. 将此目标添加到文件末尾:
    <Target Name="SelectWpfThemeAssembly" AfterTargets="ResolveAssemblyReferences" Condition="'$(ReferenceWpfAeroTheme)' == 'true'     Or&#xD;&#xA;                     '$(ReferenceWpfAero2Theme)' == 'true'    Or&#xD;&#xA;                     '$(ReferenceWpfAeroLiteTheme)' == 'true' Or&#xD;&#xA;                     '$(ReferenceWpfClassicTheme)' == 'true'  Or &#xD;&#xA;                     '$(ReferenceWpfLunaTheme)' == 'true'     Or&#xD;&#xA;                     '$(ReferenceWpfRoyaleTheme)' == 'true'">
            <ItemGroup>
                <_WpfThemeAssemblies Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)'=='Microsoft.WindowsDesktop.App.Ref'  And &#xD;&#xA;                                   '%(ReferencePath.FileName)'=='PresentationFramework.Aero'">
                    <Aliases Condition="'$(WpfAeroThemeAliases)'!=''">$(WpfAeroThemeAliases)</Aliases>
                </_WpfThemeAssemblies>
    
                <_WpfThemeAssemblies Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)'=='Microsoft.WindowsDesktop.App.Ref'  And &#xD;&#xA;                                   '%(ReferencePath.FileName)'=='PresentationFramework.Aero2'">
                    <Aliases Condition="'$(WpfAero2ThemeAliases)'!=''">$(WpfAero2ThemeAliases)</Aliases>
                </_WpfThemeAssemblies>
    
                <_WpfThemeAssemblies Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)'=='Microsoft.WindowsDesktop.App.Ref'  And &#xD;&#xA;                                   '%(ReferencePath.FileName)'=='PresentationFramework.AeroLite'">
                    <Aliases Condition="'$(WpfAeroLiteThemeAliases)'!=''">$(WpfAeroLiteThemeAliases)</Aliases>
                </_WpfThemeAssemblies>
    
                <_WpfThemeAssemblies Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)'=='Microsoft.WindowsDesktop.App.Ref'  And &#xD;&#xA;                                   '%(ReferencePath.FileName)'=='PresentationFramework.Classic'">
                    <Aliases Condition="'$(WpfClassicThemeAliases)'!=''">$(WpfClassicThemeAliases)</Aliases>
                </_WpfThemeAssemblies>
    
                <_WpfThemeAssemblies Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)'=='Microsoft.WindowsDesktop.App.Ref'  And &#xD;&#xA;                                   '%(ReferencePath.FileName)'=='PresentationFramework.Luna'">
                    <Aliases Condition="'$(WpfLunaThemeAliases)'!=''">$(WpfLunaThemeAliases)</Aliases>
                </_WpfThemeAssemblies>
    
    
                <_WpfThemeAssemblies Include="@(ReferencePath)" Condition="'%(ReferencePath.NuGetPackageId)'=='Microsoft.WindowsDesktop.App.Ref'  And &#xD;&#xA;                                   '%(ReferencePath.FileName)'=='PresentationFramework.Royale'">
                    <Aliases Condition="'$(WpfRoyaleThemeAliases)'!=''">$(WpfRoyaleThemeAliases)</Aliases>
                </_WpfThemeAssemblies>
    
    
                <ReferencePath Remove="@(_WpfThemeAssemblies)" />
    
                <ReferencePath Include="@(_WpfThemeAssemblies)" Condition="('%(_WpfThemeAssemblies.FileName)'=='PresentationFramework.Aero' And '$(ReferenceWpfAeroTheme)'=='true')          Or &#xD;&#xA;                                ('%(_WpfThemeAssemblies.FileName)'=='PresentationFramework.Aero2' And '$(ReferenceWpfAero2Theme)'=='true')        Or &#xD;&#xA;                                ('%(_WpfThemeAssemblies.FileName)'=='PresentationFramework.AeroLite' And '$(ReferenceWpfAeroLiteTheme)'=='true')  Or &#xD;&#xA;                                ('%(_WpfThemeAssemblies.FileName)'=='PresentationFramework.Classic' And '$(ReferenceWpfClassicTheme)'=='true')    Or &#xD;&#xA;                                ('%(_WpfThemeAssemblies.FileName)'=='PresentationFramework.Luna' And '$(ReferenceWpfLunaTheme)'=='true')          Or&#xD;&#xA;                                ('%(_WpfThemeAssemblies.FileName)'=='PresentationFramework.Royale' And '$(ReferenceWpfRoyaleTheme)'=='true')" />
            </ItemGroup>
        </Target>
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2016-01-27
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多