小编Den*_*nis的帖子

如何强制WiX引导程序下载MSI包?

我正在阅读WiX工具集手册的这一部分,并想知道如何强制WiX引导程序下载MSI软件包?例如,在安装我的应用程序之前,引导程序必须下载并安装:

  • .NET Framework客户端配置文件
  • SQL Server 2008 R2共享管理对象.

我想,我可以MsiPackage像这样描述相应的:

该参考架构MsiPackage元素告诉,那

"至少必须指定SourceFile或Name属性."

而且,当然,它不是谎言 - 没有SourceFileName捆绑项目编译错误.

添加RemotePayloadMsiPackage这样的:

  <MsiPackage Name="redist\SharedManagementObjects.msi"
              DisplayName="Microsoft SQL Server 2008 R2 Management Objects"
              DisplayInternalUI="yes"
              Vital="yes"
              DownloadUrl="http://go.microsoft.com/fwlink/?LinkID=188438&amp;clcid=0x409">
    <RemotePayload Size="10953728"
                   Version="10.50.1600.1"
                   ProductName="Microsoft SQL Server 2008 R2 Management Objects"
                   Description="Microsoft SQL Server 2008 R2 Management Objects"
                   Hash="6ce3a433309c63d98bcf0e2b9f1dfaed8cc18783"/>
  </MsiPackage>
Run Code Online (Sandbox Code Playgroud)

导致构建错误:

无法阅读包''.无法打开此安装包.验证程序包是否存在以及是否可以访问它,或与应用程序供应商联系以验证它是否为有效的Windows Installer程序包.

我错过了什么吗?

wix wix3.6

5
推荐指数
1
解决办法
2964
查看次数

如何从SMO解析这个类似路径的字符串?

我想知道,有没有任何标准的方法来解析这样的路径类似的字符串:

Server[@Name='MyServerName']/Database[@Name='MyDatabaseName']/Table[@Name='MyTableName' and @Schema='MySchemaName']
Run Code Online (Sandbox Code Playgroud)

结果必须是:

  • ItemName(服务器)
    • PropertyName(Name),PropertyValue(MyServerName)
  • ItemName(数据库)
    • PropertyName(Name),PropertyValue(MyDatabaseName)
  • ItemName(表)
    • PropertyName(Name),PropertyValue(MyTableName)
    • PropertyName(Schema),PropertyValue(MySchemaName)

这里最明显的是做一个正则表达式(当然,String.Split),但可能有一个更好的,标准的方式?

有关信息:字符串来自SMO Urn.Value.

UPDATE.

找到答案,见下文.

c#

5
推荐指数
1
解决办法
909
查看次数

DbContext.ChangeTracker.HasChanges 非常慢

我的应用程序使用实体框架 6.1.0 和DbContextAPI。

它是某种 CAD 系统,旨在编辑一些工程文档。为了检测文档中更改的事实,我正在使用DbContext.ChangeTracker.HasChanges.

当文档具有大量数据(大约 20-25 万个实体)时,DbContext.ChangeTracker.HasChanges运行速度非常慢。由于此代码用于启用/禁用“保存”命令,因此它从 UI 线程执行得相当频繁。这反过来又会影响应用程序的性能。

我重写了这个片段:

    private Lazy<DbContext> context;

    public bool HasChanges
    {
        get
        {
            if (!context.IsValueCreated)
            {
                return false;
            }

            return context.Value.ChangeTracker.HasChanges();
        }
    }
Run Code Online (Sandbox Code Playgroud)

对于这个:

    public bool HasChanges
    {
        get
        {
            if (!context.IsValueCreated)
            {
                return false;
            }

            var objectStateManager = ((IObjectContextAdapter)context.Value).ObjectContext.ObjectStateManager;

            return
                objectStateManager.GetObjectStateEntries(EntityState.Added).Any() ||
                objectStateManager.GetObjectStateEntries(EntityState.Deleted).Any() ||
                objectStateManager.GetObjectStateEntries(EntityState.Modified).Any();
        }
    }
Run Code Online (Sandbox Code Playgroud)

而且(这是一个奇迹!)一切都运行得非常快。

看起来DbChangeTracker.HasChanges实施并不是最佳的。我错过了什么吗?

c# entity-framework

5
推荐指数
1
解决办法
5445
查看次数

具有约束的泛型方法的重载解决问题

代码示例:

interface IFoo { }
class FooImpl : IFoo { }

static void Bar<T>(IEnumerable<T> value)
    where T : IFoo
{
}

static void Bar<T>(T source)
    where T : IFoo
{
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释,为什么这个方法调用:

var value = new FooImpl[0];
Bar(value);
Run Code Online (Sandbox Code Playgroud)

目标Bar<T>(T source)(因此,不编译)?

在解决重载时,编译器是否会考虑类型参数约束?

UPD.

避免与数组混淆.任何实现都会发生这种情况IEnumerable<T>,例如:

var value = new List<FooImpl>();
Run Code Online (Sandbox Code Playgroud)

UPD 2.

@ ken2k提到了协方差.但是,让我们忘掉FooImpl.这个:

var value = new List<IFoo>();
Bar(value);
Run Code Online (Sandbox Code Playgroud)

产生相同的错误.
我敢肯定,之间的隐式转换List<IFoo>IEnumerable<IFoo>存在,因为我可以很容易地写出这样的事情:

static void SomeMethod(IEnumerable<IFoo> sequence) {}
Run Code Online (Sandbox Code Playgroud)

并传入value其中: …

c# generics overload-resolution

5
推荐指数
1
解决办法
603
查看次数

ScrollViewer忽略ContentTemplateSelector

我遇到过问题,使用ScrollViewer.
这是示例视图模型:

public class A
{
    public string Text { get; set; }
}

public class B
{
    public int Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

......和DataTemplateSelector:

public class ViewModelTemplateSelector : DataTemplateSelector
{
    public DataTemplate ATemplate { get; set; }
    public DataTemplate BTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item is A)
            return ATemplate;

        if (item is B)
            return BTemplate;

        return base.SelectTemplate(item, container);
    }
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<Grid>
    <Grid.Resources>
        <local:ViewModelTemplateSelector …
Run Code Online (Sandbox Code Playgroud)

c# wpf datatemplate scrollviewer

5
推荐指数
1
解决办法
229
查看次数

避免“无法创建默认转换器以在类型‘Derived_N’和‘Base’之间执行‘双向’转换”错误的解决方法

我有一些类型层次结构:

public class Base {}
public class Derived_1 : Base {}
public class Derived_2 : Base {}
// more descendants...
public class Derived_N : Base {}
Run Code Online (Sandbox Code Playgroud)

此层次结构中的类型用作视图模型中的查找列表:

public class SomeViewModel
{
    // available items
    public IEnumerable<Derived_N> SomeItems { get; }

    // currently selected item
    public Derived_N SelectedItem { get; set; }

    // there could be several property pairs as above
}
Run Code Online (Sandbox Code Playgroud)

为了从查找列表中选择值,我创建了用户控件(某种选择器)。由于从选择过程的角度来看,所有Base后代看起来都相似,因此用户控件操作Base类型属性:

    public IEnumerable<Base> ItemsSource
    {
        get { return (IEnumerable<Base>)GetValue(ItemsSourceProperty); }
        set { SetValue(ItemsSourceProperty, value); } …
Run Code Online (Sandbox Code Playgroud)

c# wpf

5
推荐指数
1
解决办法
3992
查看次数

WPF:如何通过XAML传递System.Type的实例作为Binding.ConverterParameter?

我有一些CLR类型"MyType".是否可以通过XAML将typeof(MyType)结果作为Binding.ConverterParameter传递?

{Binding Converter={StaticResource myConverter}, **ConverterParameter=???**}
Run Code Online (Sandbox Code Playgroud)

parameters wpf binding converter

4
推荐指数
1
解决办法
2272
查看次数

WiX源可以从解决方案中的其他项目引用NuGet包吗?

我有两个项目的解决方案:

  • .NET应用程序
  • WiX安装项目.

我知道,可以在WiX源($(var.WindowsFormsApplication1.TargetFileName))中引用项目输出.

现在我已经为我的.NET应用程序添加了一个NuGet包引用.所以,我想把NuGet包内容带到我的设置中.

有没有办法这样做而不是手动添加文件?

wix visual-studio-2010 nuget wix3.6

4
推荐指数
1
解决办法
2686
查看次数

探查器图中的“非托管内存”。这是内存泄漏指示吗?

在剖析应用程序的内存使用情况时,我已经遇到了以下图表:

在此处输入图片说明

如您所见,在“快照1”行之前,非托管内存大约占已使用内存的一半。然后,在“快照1”和2分55秒(请参阅下面的时间线)之后,我强制执行垃圾收集。

如我所料,第2代主要是收集的,但是未托管的内存没有释放,现在它可以容纳大约2个。总已用内存的2/3。

我不知道在这种情况下“非托管内存”是什么意思。这是带有某些WinForms / GDI +互操作的WPF应用程序。我敢肯定,所有应该处置的东西都已处置。此外,也没有明确的平台互操作代码。其余的托管内存都可以。

这是内存泄漏指示吗?
如果是这样,在这里检测内存泄漏的方法是什么?
这很重要,我使用的探查器是JetBrains dotMemory。

c# profiling memory-leaks

4
推荐指数
1
解决办法
3538
查看次数

使用数据迁移脚本时出现“无效的列名称”错误

我的 SSDT 项目中有几个数据迁移脚本。

第一个将数据从一个表存储到另一个临时表:

IF EXISTS 
(
    SELECT * 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = N'DocumentEvent'
    AND column_name = N'Thumbprint'
)
BEGIN
    IF NOT EXISTS
    (
        SELECT * FROM INFORMATION_SCHEMA.TABLES 
        WHERE TABLE_NAME = N'tmp_DocumentEventCertificates'
    )
    BEGIN
        CREATE TABLE tmp_DocumentEventCertificates
        (
            [EventId] UNIQUEIDENTIFIER NOT NULL,
            [Thumbprint] nvarchar(100)
        )
    END

    INSERT INTO
        tmp_DocumentEventCertificates
    SELECT
        [EventId],
        [Thumbprint]
    FROM
        [DocumentEvent]
    WHERE
        [Thumbprint] IS NOT NULL
END
Run Code Online (Sandbox Code Playgroud)

第二个将数据从临时表传输到另一个表:

IF EXISTS
(
    SELECT * FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME = N'tmp_DocumentEventCertificates'
)
BEGIN
    UPDATE
        [DocumentAttachment]
    SET
        [DocumentAttachment].[Certificate_Thumbprint] = …
Run Code Online (Sandbox Code Playgroud)

sql-server dacpac sql-server-data-tools

4
推荐指数
1
解决办法
1644
查看次数