小编Mik*_*e G的帖子

具有默认值的依赖属性抛出StackOverflowException

我正在使用WPF SQL连接用户控件.每当我在一个已打开,关闭然后再打开的选项卡(AvalonDock DocumentTab)上抛出StackOverflowException时,我遇到了一个问题.

我已经搞砸了Jake的基础实现以更好地适应我的应用程序,但它基本上是相同的.我添加了一个禁用数据库选择的属性.

我已将控件放入我的应用程序中,如下所示:

<controls:SqlConnectionStringBuilder
       Grid.Row="2"
       Margin="0,10,0,0"
       ConnectionString="{Binding ElementName=listBoxClients,
                                  Path=SelectedItem.ConnectionString,
                                  UpdateSourceTrigger=PropertyChanged}"
       Header="Connection String"
       RequireDatabase="True" />
Run Code Online (Sandbox Code Playgroud)

我已经完成了对SqlConnectionStringBuilder的代码隐藏的一些重构,以解决这个问题,但这似乎是违规的代码:

public static readonly DependencyProperty ConnectionStringProperty =
    DependencyProperty.Register(
        "ConnectionString", 
        typeof(SqlConnectionString),
        typeof(SqlConnectionStringBuilder),
        new FrameworkPropertyMetadata(
            new SqlConnectionString { IntegratedSecurity = true, Pooling = false },
            FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public SqlConnectionString ConnectionString
{
    get { return (SqlConnectionString)GetValue(ConnectionStringProperty); }
    set { SetValue(ConnectionStringProperty, value); }
}
Run Code Online (Sandbox Code Playgroud)

在选项卡的第二次打开时,SqlConnectionString对象将使用其OnPropertyChanged方法和IntegratedSecurity属性进入无限循环.当我使ConnectionString属性不是DependencyProperty我没有得到这个问题.对我来说,这说明问题是依赖属性的默认值.

我在网上偷看,看看是否有其他人有这个问题,但似乎我可能已经让自己陷入了一些困境.我认为这个问题可能来自唯一接近的问题是关于依赖属性的这个问题,这个问题被作为线程安全来回答.我不确定依赖属性如何处理它们的默认值,但我可以看到,如果同一个对象连接了两次OnPropertyChanged事件的问题.然而,这也让我相信,如果是这种情况,这个问题会在某处被注意到!

有什么想法吗?

附加信息:
我从依赖项属性的注册中删除了默认值(将其设置为null).这可以防止问题发生.此解决方案的唯一缺点是UI处于 …

c# wpf dependency-properties wpf-controls

12
推荐指数
1
解决办法
1025
查看次数

是否可以同时使用本地NuGet存储库和远程存储库

我一直在将我们的库项目转换为NuGet包,并在内部NuGet Feed上托管它们.这很有效,并且减少了开发人员重新创建帮助程序类和"重新发明轮子".另一个巨大优势是其他团队现在可以从我们的项目中使用"已发布"的库.到目前为止,它基本上是一场巨大的胜利.

我们面临的唯一问题是本地构建.我们想要做的是在将构建推送到NuGet提要之前,在我们的消费项目中测试库.我们遇到了一个问题,因为使用这些库的项目被设置为使用本地提要(构建服务器上的包恢复允许我们的主干与最新的"已发布"库一起构建).

有没有办法让本地构建从本地存储库中获取?我已经开始为创建本地包文件的库进行后构建任务.使用NuGet.config我想我应该能够屏蔽某些存储库,然后屏蔽构建服务器上的配置文件.我的理论是,当使用本地构建时,应该选择本地存储库,并在构建服务器上使用源.

这可能吗?有没有其他人记录过如何做到这一点?

这是我用于创建本地包的后构建任务:

  <PropertyGroup>
    <PackOutputDir>$([System.IO.Path]::Combine($(SolutionDir), "..\Prerelease"))</PackOutputDir>
    <BuildSpecCommand>$(NuGetCommand) spec $(ProjectFileName) -force -NonInteractive -Verbosity detailed</BuildSpecCommand>
    <PackCommand>$(NuGetCommand) pack $(ProjectFileName) -OutputDirectory "$(PackOutputDir)"</PackCommand>
  </PropertyGroup>
  <Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <Exec Command="$(BuildSpecCommand)" LogStandardErrorAsError="true" Condition=" '$(OS)' == 'Windows_NT' " />
    <Exec Command="$(PackCommand)" LogStandardErrorAsError="true" Condition=" '$(OS)' == 'Windows_NT' " />
  </Target>
Run Code Online (Sandbox Code Playgroud)

我把这个NuGet.config放在我们团队项目的根目录下.此文件隐藏在构建服务器上:

<configuration>
  <packageSources>
    <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
    <add key="TestSource" value="Source\Prerelease" />
  </packageSources>
  <disabledPackageSources>
    <add key="LocalNuGetFeed" value="LocalNuGetFeed" />
  </disabledPackageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)"  />
  </activePackageSource>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这是我放在一个文件夹中的NuGet.config,它应该在构建服务器的层次结构中被选中:

<configuration>
  <packageSources> …
Run Code Online (Sandbox Code Playgroud)

nuget

12
推荐指数
1
解决办法
4320
查看次数

RDLC嵌入式图像在PDF中失真

我有一个非常简单的RDLC报告,我在标题中使用PNG图像构建.经过多次试验,我们无法获得外部图像来处理分期和生产中的报告.

然后我将图像嵌入RDLC并部署更新的文件.图像显示在ReportViewer控件中.但是,当使用查看器的导出功能来获取PDF时,图像会出现乱码和扭曲.它基本上看起来好像图像就像星球大战的介绍文本,但垂直重复直到它消失.这在我的测试机器和阶段/生产中都会发生.

是否有一些我没有正确嵌入图像的东西?我想过看看我是否可以用另一种方式对图像进行MIME编码,然后将其插入到RDLC中.似乎已经延伸到了工作状态.

pdf image rdlc reporting-services

10
推荐指数
1
解决办法
9755
查看次数

断言在摩卡测试中打破异步函数

我正在构建一个节点模块,我正在尽力对其进行单元测试.我已经设置了mocha和chai来进行测试处理.我在测试我的异步方法(返回promises的方法)时遇到问题.

在以下测试中,我正在测试"升级"对象上的方法.

  it('Should return a list of versions for the default git repo', function (done) {
    fs.writeFileSync(appSetup.CONFIG_FILENAME, JSON.stringify(appSetup.DEFAULT_CONFIG));

    var upgrade = new Upgrade({
      quiet: true
    });

    upgrade.getVersions().then(function (versions) {
      assert(versions && versions.length > 0, 'Should have at least one version.');
      assert.equal(1, 2); // this throws the exception which causes the test case not even exist
      done();
    }, done);
  });
Run Code Online (Sandbox Code Playgroud)

getVersions()调用返回一个promise,因为该方法是异步的.当promise解析时,我想测试versions变量中返回的值.

assert(versions && versions.length > 0, 'Should have at least one version.');是实际的测试.我添加assert.equal(1, 2);是因为我注意到当测试失败时,测试用例甚至不会出现在测试列表中. …

testing mocha.js node.js promise

7
推荐指数
2
解决办法
4494
查看次数

LINQ查询返回第一个结果的多个副本

我试图弄清楚为什么LINQ中的简单查询返回奇数结果.

我有一个在数据库中定义的视图.它基本上汇集了其他几个表,并做了一些数据调整.除了它处理大型数据集并且可能有点慢之外,它确实没有什么特别之处.

我想基于很长时间来查询这个视图.下面的两个示例查询显示对此视图的不同查询.

var la = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).ToList();

var deDa = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).Select(p => new { p.AccountNumber, p.SecurityNumber, p.CUSIP }).ToList();
Run Code Online (Sandbox Code Playgroud)

第一个应该交回一个List.第二个是匿名对象列表.

当我在实体框架中执行这些查询时,第一个将返回结果列表,它们完全相同.

第二个查询将返回数据,其中帐号是我查询的号码,其他值不同.这似乎是基于每个帐号来执行此操作,即如果我要查询一个帐号或另一个帐户的所有位置对象将具有相同的值(该帐户的位置列表中的第一个)和第二个帐户将有一组Position对象,它们都具有相同的值(同样,它是Position对象列表中的第一个).

我可以编写实际上与两个EF查询中的任何一个相同的SQL.他们都返回显示正确数据的结果(比如说四个),一个账号用不同的证券号码.

为什么会这样?有什么东西我可能做错了,所以如果我有上面的第一个查询的四个结果,第一个记录的数据也出现在2-4号的对象???

我无法理解会导致这种情况的原因.我在谷歌搜索了各种关键字,但没有看到任何人遇到过这个问题.我们将Positions类分类为添加功能(智能对象)和一些智能属性.甚至有一些构造函数提供了一些视图模型类型支持.在请求中没有调用它(我对此肯定是99%).但是,我们在整个应用程序中执行相同的模式.

我唯一能想到的是EDMX中的映射很棘手.有没有一种方法,如果EDMX中的"主键"在构造视图的方式中实际上不是唯一的,会发生这种情况?我认为将这个模型导入EDMX的开发者可以让设计师自动选择独一无二的东西.

任何帮助都会给一个羞辱的开发者带来一些希望!

c# linq sql-server linq-to-entities

6
推荐指数
1
解决办法
3920
查看次数

如何重定向 Powershell 的输出

我有一个类似但不同的问题,例如How to redirect Powershell output from a script run by TaskScheduler and override default width of 80 个字符

我有一个很久以前编写的自定义安装程序框架。在其中我可以执行“任务”。我最近必须添加一个任务来执行 PowerShell 脚本。现在,即使该任务是用 C# 编写的,我也无法直接调用 PowerShell 脚本中的命令。不幸的是,这已经不可能了。

简而言之,我想从 C# 调用 PowerShell 可执行文件并将其输出重定向回我的应用程序。这是我到目前为止所做的:

我可以使用以下代码成功调用 PowerShell(来自我创建的测试项目):

  string powerShellExeLocation = null;

  RegistryKey localKey = Registry.LocalMachine;

  RegistryKey subKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine");
  powerShellExeLocation = subKey.GetValue("ApplicationBase").ToString();

  if (!Directory.Exists(powerShellExeLocation))
    throw new Exception("Cannot locate the PowerShell dir.");

  powerShellExeLocation = Path.Combine(powerShellExeLocation, "powershell.exe");

  if (!File.Exists(powerShellExeLocation))
    throw new Exception("Cannot locate the PowerShell executable.");

  string scriptLocation = Path.Combine(Environment.CurrentDirectory, "PowerShellScript.ps1");

  if (!File.Exists(scriptLocation))
    throw new …
Run Code Online (Sandbox Code Playgroud)

c# powershell

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

Team Foundation Server 2013的Git协议

我最近将我们的TFS系统升级到TFS 2013.我有一组开发人员正在使用NodeJS开发一些内部消耗的工具.他们以前在内部Gitorious服务器上有他们的来源.他们开发的工具由其他开发人员通过npm install使用Gitorious repo url 运行安装:

npm install git://gitorious.corp.local/project/repo.git
Run Code Online (Sandbox Code Playgroud)

由于TFS 2013支持我们的旧TFVC,现在有了Git,我们已经将每个人都移到了一个源控制服务器上.该团队已迁移其存储库,但仍希望能够拥有install命令.运行类似于:

npm install git://tfs2013.corp.local:8080/tfs/DefaultCollection/TeamProject/_git/Repo
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.这是错误:

npm ERR! git clone git://tfs2013.corp.local:8080/tfs/DefaultCollection/TeamProject/_git/Repo Cloning into bare repository 'C:\npm-cache\_git-remotes\git-tfs-8080-tfs-DefaultCollection-Project-git-repo-fbbf0c4b'...
npm ERR! git clone git://tfs2013.corp.local:8080/tfs/DefaultCollection/TeamProject/_git/Repo
npm ERR! git clone git://tfs2013.corp.local:8080/tfs/DefaultCollection/TeamProject/_git/Repo fatal: protocol error: bad line length character: HTTP
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "git://tfs2013.corp.local:8080/tfs/DefaultCollection/TeamProject/_git/Repo"
npm ERR! node v0.10.35
npm ERR! npm  v2.4.1
npm ERR! code 128

npm ERR! Command failed: fatal: protocol error: bad line …
Run Code Online (Sandbox Code Playgroud)

git tfs node.js npm tfs2013

5
推荐指数
0
解决办法
584
查看次数

Angular 6库组件和SCSS

我一直在构建Angular 6库。新过程非常好。

我将使用以前版本中编写的一些模块及其组件进行转换。这些组件已经过修饰,因此它们的视图和样式分别是外部文件,html和scss。

我正在使用的库还包含scss-bundler在构建过程中使用的全局样式,这些样式会输出到库文件夹中。这些样式不包括任何组件样式。

我已经使用“基本” Angular应用程序作为组件的演示站点。同样,非常高兴我可以使用一个存储库来构建我的库并部署它的演示。

在应用程序中,我将从库的dist目录中导入全局样式:

/* VARIABLES */
@import "../dist/vdl-lib/variables";

/* BOOTSTRAP */
@import "../node_modules/bootstrap/scss/bootstrap";

@import "../node_modules/@angular/material/prebuilt-themes/indigo-pink.css";

/* VDL-LIB */
@import "../dist/vdl-lib/styles";

/* DEMO APPLICATION STYLES */
$fa-font-path: "../node_modules/font-awesome/fonts";
@import "../node_modules/font-awesome/scss/font-awesome";

html, body {
  height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

这很好用,此时我的组件已正确设置样式并应用了全局布局样式。

现在,这是我遇到问题的地方。SCSS的原因是能够自定义,对吗?在标头组件(位于库中)中,我具有徽标图像的某些样式:

.header-logo {
  display: flex;
  align-items: center;
  .name-brand {
    padding-right: $padding-base;
    img {
      height: $logo-height;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

styles.scss(上面显示的)中,假设我$logo-height: 68px紧接在之前进行了变量重新分配@import "../dist/vdl-lib/styles";。当应用程序运行时,组件的徽标大小不会更改。我可以看到高度设置为我的内部“变量” scss文件中的原始值。

这是SCSS还是Angular中的替代问题?看来不是这样!据我所知,何时构建库,输出组件样式已编译为CSS

在查看fesm5输出js后,我得出了这个结论。我可以找到该组件的装饰器,并确认它是CSS。

我试过使用styles而不是styleUrls在组件装饰器上。我删除了“变量” scss文件的导入。这使输出JavaScript看起来具有SCSS,但是运行演示应用程序显示未应用任何组件样式。我不确定是否存在某些排序问题,以防止在演示应用程序中导入的变量 …

sass angular angular-library

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

是否可以为SwaggerUI动态添加SwaggerEndpoints?

我们正在 .NET Core 中构建面向服务的架构。我们决定使用 Ocelot 作为我们的 API 网关。我已将 Ocelot 与 Consul 集成以进行服务发现。现在我正在尝试为所有下游服务创建一个统一的 Swagger UI。

在服务发现之前,我们的 Swagger 设置如下:

// Enable middleware to serve generated Swagger as a JSON endpoint
app.UseSwagger(c => { c.RouteTemplate = "{documentName}/swagger.json"; });

// Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("/docs/customer/swagger.json", "Customers Api Doc");
  c.SwaggerEndpoint("/docs/employee/swagger.json", "Employee Api Doc");
  c.SwaggerEndpoint("/docs/report/swagger.json", "Reports Api Doc");
});
Run Code Online (Sandbox Code Playgroud)

在 Swagger UI 上,这提供了一个“选择规范”下拉列表。开发人员喜欢这个功能,我们希望保留它。然而,现在我们已经删除了手动配置以支持服务发现,我们还希望动态更新这些端点。

使用当前可用的 Swagger 解决方案,这可能吗?我还没有看到任何与服务发现或能够动态配置 UI 相关的内容。想法和建议?

更新

我想出了一个方法来做到这一点。这有点hack-ish,我希望有一种方法可以做到这一点,而不是那么严厉。

public class Startup 
{
    static object LOCK …
Run Code Online (Sandbox Code Playgroud)

service-discovery swagger swagger-2.0 asp.net-core ocelot

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

Java MD5哈希不匹配.NET哈希

我有一个用C#编写的web服务处理一些值的验证.在其中我需要检查在调用Java客户端中生成的MD5哈希.

Java客户端以这种方式生成哈希

Charset utf8Charset = Charset.forName("UTF-8");

byte[] bytesOfPhrase = phrase.getBytes(utf8Charset);
MessageDigest md = MessageDigest.getInstance("MD5");

byte[] thedigest = md.digest(bytesOfPhrase);
this._AuthenticationToken = new String(thedigest, utf8Charset);
Run Code Online (Sandbox Code Playgroud)

C#webservice以这种方式生成它:

private static string HashString(string toHash)
{
    MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();

    byte[] hashedBytes = md5Provider.ComputeHash(_StringEncoding.GetBytes(toHash));
    return Convert.ToBase64String(hashedBytes);
}
Run Code Online (Sandbox Code Playgroud)

我在Java代码中尝试了几个字符集,但它们都没有产生任何类似于Java生成的字符串的字符串.使用在每次调用期间相同的硬编码值(意味着我已经对参数进行了硬编码以使哈希值匹配)仍会产生奇怪的Java字符串.

C#散列值示例:

6wM7McddLBjofdFJ3rU6 /克==

我发布了Java产生的字符串示例,但它有一些非常奇怪的字符,我认为我不能在这里粘贴.

我究竟做错了什么?

java hash md5

2
推荐指数
1
解决办法
4099
查看次数

在没有打开Companion应用程序的情况下获取Android Wear数据

我试图通过在Android Wear上实现自定义应用程序,为我们当前的应用程序产品添加一些功能.

在一个理想的用例中,我想让用户打开磨损应用程序,并让它向掌上电脑询问它已存储的当前数据.我的第一个想法是使用IntentService,但似乎我无法使用隐式Intent.此外,在阅读数据同步部分后,似乎这不是获取可穿戴设备数据的首选方式.

我已经阅读了Wear文档的数据层和同步部分.在我看来,为了在手持设备和可穿戴设备之间进行数据同步,必须首先在掌上电脑上打开配套应用程序,在GoogleApiClient之间进行数据同步,磨损应用程序打开,磨损应用程序接收数据来自GoogleApiClient.

以上流程是否有效?从我的阅读来看,这似乎发生在半实时同伴应用程序和磨损应用程序同时打开.如果用户关闭手持设备上的配套应用程序,然后打开磨损应用程序,那么数据是否存在,或者仅当两个活动都处于活动状态时才会发生推送?

那么,这是否是Google对可穿戴模型的设计约束,以便配套应用必须在可穿戴设备请求之前推送数据?另外,重复我的第二个问题,伴侣应用程序可以在推送数据后关闭,而可穿戴设备在其他时间检索数据,即使配套应用程序没有运行吗?

android wear-os

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