当我在另一台计算机上运行程序时,不会调用方法

时间:2016-11-30 13:53:01

标签: c# wpf

我正在使用.NET Framework 4.6.2,Entity Framework 6.13和C#开发WPF应用程序。

我已经在Debug \ Any CPU和Debug \ x86中编译了应用程序。在这两种情况下,相同的可执行文件在第二台计算机中无法正常工作。在我的开发机器上工作正常,在第二个机器上它没有运行方法。

当我从ComboBox

中选择一个项目时出现此问题
<ComboBox x:Name="comboBoxTrzType" Grid.Column="1" Margin="10,0,25,0" VerticalAlignment="Center" Height="25" ItemsSource="{Binding TrzTypes}" SelectedItem="{Binding TrzTypeSelectedItem}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Name}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

这个属性:

public TrzType TrzTypeSelectedItem
{
    get
    {
        return trzTypeSelectedItem;
    }
    set
    {
        if (value == null)
            log.Debug("TrzTypeSelectedItem: NULO");
        else
            log.DebugFormat("TrzTypeSelectedItem: {0}", value.Legislation);

        if (value != trzTypeSelectedItem)
        {
            log.Debug("TrzTypeSelectedItem changed");

            trzTypeSelectedItem = value;

            if (value != null)
            {
                log.Debug("TrzTypeSelectedItem value no NULL");

                LoadProductsByLaw(trzTypeSelectedItem.Legislation);

                log.Debug("TrzTypeSelectedItem after load");
            }

            RaisePropertyChangedEvent("TrzTypeSelectedItem");
        }
    }
}

该方法永远不会运行:

private void LoadProductsByLaw(LawTypes law)
{
    log.Debug("LoadProductsByLaw");

    List<Products> pro = null;

    PanelInfo = Resources.LoadingProducts;
    InfoPanelVisibility = Visibility.Visible;

    ConnectToCodesManager();

    pro = codeManangerClient.GetProductsByLawPublic((byte)law);

    if ((pro != null) && (pro.Count > 0))
    {
        Products = new ObservableCollection<Products>(pro);
        RaisePropertyChangedEvent("Products");
    }
    else
    {
        App.Current.Dispatcher.Invoke((Action)delegate
        {
            if ((Products != null) && (Products.Count > 0))
                Products.Clear();
        });
    }

    App.Current.Dispatcher.Invoke((Action)delegate
    {
        if ((ProductionOrders != null) && (ProductionOrders.Count > 0))
            ProductionOrders.Clear();

        if ((Batches != null) && (Batches.Count > 0))
            Batches.Clear();

        IsProductSelectEnabled = true;
        IsProductionOrderSelectEnabled = false;
        IsBatchSelectEnabled = false;

        InfoPanelVisibility = Visibility.Collapsed;
        PanelInfo = string.Empty;
    });
}

对这个问题有任何想法吗?

我的开发机器是:

  

Windows 7 Pro Service Pack 1
  英特尔酷睿i7-490 @ 3.60GHz
  16.0GB的RAM
  64位操作系统

它没有运行的第二台机器是:

  

Windows 7 Embedded Standard Service Pack 1   Intel Celeron CPU 1020E @ 2.20Hz
  2,00 GB的内存
  32位操作系统

它写的日志是:

TrzTypeSelectedItem: European
TrzTypeSelectedItem changed
TrzTypeSelectedItem value no NULL

但下一个应该是LoadProductsByLaw,但我不会在日志文件中看到它。

1 个答案:

答案 0 :(得分:0)

问题是该程序使用的是GAC中的dll,而不是在程序的文件夹中使用dll。这两个dll都有相同的版本号。

当我添加更多功能时,我还没有改变dll的版本。

我更改了dll版本号,重新编译了程序,现在它可以在第二台计算机上运行。

我不明白为什么它总是从GAC获得第一个dll。