引用强名称程序集

时间:2018-01-19 12:44:23

标签: c# .net wpf xaml strongname

我对xaml使用的内部类有一个特殊的问题。

问题如下:

我们决定强化所有装配。在强势命名之后,除了一个项目之外,所有项目都在VS 2017下顺利编制。情况如下:

  • Assembly Company.Component - 编译没有问题,并公开其内部结构如下:

    [assembly: InternalsVisibleTo("Company.Component.Test, PublicKey={omitted}")]
    [assembly: InternalsVisibleTo("Company.OtherLibrary, PublicKey={omitted}")]
    
  • Assembly Company.Component.Test - 编译没有问题,并且可以访问Company.Component中的内部。所有测试都通过了。
  • Company.OtherLibrary - 由于其xaml文件中存在以下错误,根本无法编译:

    Only public or internal classes can be used within markup. 'Converter1' is not public or internal.
    

有问题的xaml文件可以在下面看到(名称已更改):

<ns:class x:Class="Company.OtherLibrary.Class"
                   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
                   xmlns:converters="clr-namespace:Company.Component.Converters;assembly=Company.Component"
                   xmlns:viewModels="clr-namespace:Company.OtherLibrary.ViewModels"

                   xmlns:ns="clr-namespace:Company.Component;assembly=Company.Component"
                   mc:Ignorable="d"
                   d:DesignHeight="300" d:DesignWidth="300"
                   d:DataContext="{d:DesignInstance d:Type=viewModels:ViewModelClass}"
                   Style="{StaticResource  {x:Type ns:Style}}">
<UserControl.Template>
    <ControlTemplate>
        <DockPanel>
            <DockPanel.Resources>
                <converters:Converter1 x:Key="Converter1" />
                <converters:Converter2 x:Key="Converter2" />
                <converters:Converter3 x:Key="Converter3" />
                <converters:Converter4 x:Key="Converter4" />
            </DockPanel.Resources>
...
        </DockPanel>
    </ControlTemplate>
</UserControl.Template>

现在回答一些问题:

  1. 公钥是OtherLibrary程序集的正确公钥(不仅是令牌)。实际上它与测试组件使用的相同。
  2. OtherLibrary的程序集名称与其属性中的程序集名称相同。
  3. 代码在强命名之前有效。没有对项目中的任何代码文件进行任何更改(bar AssemblyInfo.cs)。我已经检查过VS 2017 git比较。编辑的行是显示的行,编辑是插入公钥。
  4. 有时可以找到xaml-namespaces,有时不会找到。这仅适用于没有公共类的名称空间。
  5. 停靠面板资源中显示的所有转换器都是Company.Component程序集中的内部。它们都会出现以下错误:

    The type '{type}' is not accessible.
    
  6. 所有库都是针对相同版本的framework / dll构建的。
  7. 对Company.Component的程序集引用已复制本地&#39;设置为true。
  8. 我尝试了什么

    1. 清除xaml shadow-cache
    2. 清洁和重建。
    3. 更改活动构建配置(平台和调试/发布)。
    4. 手动清除所有项目的所有bin和obj目录。
    5. 重新启动计算机和VS 2017。
    6. 以上所有内容。
    7. 有一些非常简单的东西我很明显被忽视了。有人可以帮我弄清楚这里发生了什么吗?我不允许(由于遗漏的原因)更改组件库而不是强烈命名它。

0 个答案:

没有答案