小编Ken*_*art的帖子

规范化MSBuild中的项目列表

我正在尝试获取项目根目录下的所有单元测试程序集的列表.我可以这样做:

<CreateItem Include="**\bin\**\*.UnitTest.*.dll">
   <Output TaskParameter="Include" ItemName="Items"/>
</CreateItem>
Run Code Online (Sandbox Code Playgroud)

但是,由于它们存在于多个子目录中,因此会多次找到相同的DLL.有没有一种简单的方法让我根据项目元数据(即文件名和扩展名)进行规范化,以便获得一个唯一的单元测试DLL列表?或者我是否必须编写自己的任务?

msbuild unique normalize distinct

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

使用TPL进行任务组合和错误处理

我有一个具有以下结构的方法:

public Task InitializeAsync()
{
    var taskCompletionSource = new TaskCompletionSource<bool>();

    Task firstTask = ...;

    // secondTask calls taskCompletionSource.TrySetResult(true) once it considers itself "done"
    Task secondTask = firstTask.ContinueWith(..., TaskContinuationOptions.OnlyOnRanToCompletion);

    Action<TasK> errorContinuation = x =>
        {
            taskCompletionSource.SetException(e.Exception);
        };

    firstTask.ContinueWith(errorContinuation, TaskContinuationOptions.OnlyOnFaulted);
    secondTask.ContinueWith(errorContinuation, TaskContinuationOptions.OnlyOnFaulted);

    return taskCompletionSource.Task;
}
Run Code Online (Sandbox Code Playgroud)

重要的:

  • InitializeAsyncsecondTask决定之前,返回的任务不会被视为完成
  • secondTask只有firstTask成功才会运行
  • 任何一个失败firstTasksecondTask导致整个任务失败

我想知道的是,在实现相同的功能的同时,是否有更简洁的方式来表达这一点.我正在使用.NET 4.0,但我对4.5是否也使这更容易感兴趣.

.net c# task-parallel-library

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

为什么在所有初始订户断开连接后RefCount无法正常工作?

考虑以下:

[Fact]
public void foo()
{
    var result = new Subject<bool>();
    var startCount = 0;
    var completionCount = 0;
    var obs = Observable
        .Defer(() =>
            {
                ++startCount;
                return result.FirstAsync();
            })
        .Do(_ => ++completionCount)
        .Publish()
        .RefCount();

    // pretend there are lots of subscribers at once
    var s1 = obs.Subscribe();
    var s2 = obs.Subscribe();
    var s3 = obs.Subscribe();

    // even so, we only expect to be started once
    Assert.Equal(1, startCount);
    Assert.Equal(0, completionCount);

    // and we won't complete until the result ticks through …
Run Code Online (Sandbox Code Playgroud)

.net c# system.reactive

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

WPF WriteableBitmap内存泄漏?

我正在试图找出如何释放WriteableBitmap内存.

在下一部分代码中,我填充了一个WriteableBitmap的后备缓冲区,其中包含来自"BigImage"(3600*4800 px,仅用于测试)的大量数据.如果我评论位图和图像等于null的行,那么内存即使不再使用图像和位图,它也不会发布,应用程序消耗大约230 MB!

正如您在代码末尾所看到的,调用GC.Collect()来释放内存是必要的.

所以问题是,释放WriteableBitmap对象使用的内存的正确方法是什么?GC.Collect()是唯一的方法吗?

任何帮助都会很棒.

PS.对不起,我的英语不好.

private void buttonTest_Click(object sender, RoutedEventArgs e)
{
            Image image = new Image();
            image.Source = new BitmapImage(new Uri("BigImage"));

            WriteableBitmap bitmap = new WriteableBitmap(
                (BitmapSource)image.Source);

            bitmap.Lock();

            // Bitmap processing

            bitmap.Unlock();

            image = null;
            bitmap = null;

            GC.Collect();
}
Run Code Online (Sandbox Code Playgroud)

wpf memory-leaks writeablebitmap

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

NHibernate的预测

假设在一个实体中有属性id,用户名,年龄,地址.现在我只想要id和用户名,我使用这个代码.

预测允许从查询中返回除实体列表之外的其他内容.

var proj = Projections.ProjectionList()
    .Add(Projections.Property("Id"), "Id")
    .Add(Projections.Property("Username"), "Username");

var list2 = DetachedCriteria.For<User>()
    .Add(Expression.Eq("Username", "lachlan"))
    .GetExecutableCriteria( sessionFactory.GetCurrentSession())
    .SetProjection( proj )
    .List();
Run Code Online (Sandbox Code Playgroud)

我将如何检索值.在哪个对象中将采用这些值.

nhibernate projection resulttransformer

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

为什么每个不同的动态调用都会导致两个异常,并且可以抑制它们吗?

考虑以下:

using System;
using System.Dynamic;
using System.Linq;

namespace DynamicObjectTest
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic dyn = new TestDynamic();
            Console.ReadKey();

            foreach (var i in Enumerable.Range(0, 100))
            {
                Console.WriteLine(dyn.Foo());
                Console.WriteLine(dyn.Bar());
            }

            Console.ReadKey();
        }
    }

    class TestDynamic : DynamicObject
    {
        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
        {
            if (binder.Name == "Foo")
            {
                result = "Bar";
                return true;
            }
            else if (binder.Name == "Bar")
            {
                result = "Foo";
                return true;
            }

            return base.TryInvokeMember(binder, args, out …
Run Code Online (Sandbox Code Playgroud)

.net performance exception dynamic

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

.NET的开放,免费,多维数据集数据结构

我正在开展一个项目,允许用户以类似于OLAP系统中提供的方式对数据进行切片和切块.但是,数据不存储在OLAP系统中,而是作为来自关系系统的平面记录提供给前端.

我最初的想法是,我可能需要获取该平面数据并使用它填充客户端多维数据集数据结构,然后可以通过编程接口查询.虽然这样的数据结构听起来很有趣并且难以自我编写,但我想知道是否已经有一个我可以利用的免费开放实现.

理想情况下,它会:

  • 在定义维度,级别,成员和属性方面提供了很大的灵活性
  • 支持计算的措施
  • 提供一个很好的界面来查询多维数据集
  • 是免费的,开源的,并且解开任何特定的接口技术

有谁知道我可以使用的这样一个项目?

.net olap cube

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

允许添加访问者接口属性,但不允许抽象属性

为什么以下是合法的C#:

public interface ISomeInterface
{
    int SomeProperty
    {
        get;
    }
}

public class SomeClassImplementingInterface : ISomeInterface
{
    public int SomeProperty
    {
        get { return 32; }
        protected set {}
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

public abstract class SomeAbstractClass
{
    public abstract int SomeProperty
    {
        get;
    }
}

public class SomeClassExtendingAbstractClass : SomeAbstractClass
{
    public override int SomeProperty
    {
        get { return 32; }
        protected set {}
    }
}
Run Code Online (Sandbox Code Playgroud)

后者导致以下编译时错误:

'InterfaceAbstractTest.SomeClassExtendingAbstractClass.SomeProperty.set':无法覆盖,因为'InterfaceAbstractTest.SomeAbstractClass.SomeProperty'没有可覆盖的set访问器InterfaceAbstractTest

在允许前者的同时不解除后者的原因是什么?

.net c# abstract-class interface

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

JAAS keytab配置的相对路径

我有一个系统,其中.NET客户端使用Kerberos针对Java服务器进行身份验证。一切正常,但是我正在尝试改善服务器配置。当前,在C:\的根目录中需要一个keytab文件,因为我的jaas.conf看起来像这样:

Server {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    isInitiator=false
    keyTab="///C:/keytab"
    principal="XXX";
};
Run Code Online (Sandbox Code Playgroud)

我正在尝试使该keyTab属性成为相对路径,但是没有运气。我试过的

  • keyTab="///keytab"
  • keyTab="///./keytab"
  • keyTab="classpath:keytab"

所有这些都会导致异常,因此很显然找不到密钥表文件。

我搜索并阅读了文档,然后将头撞在墙上。谁能透露我要实现这一目标的神奇咒语?

java configuration kerberos jaas

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

在使用 CocoaPods 编译期间包含目录作为搜索路径

我正在尝试创建一个 iOS 项目,其中包含在其他平台(Android)之间共享的 C 代码。我正在编译的一些第三方库依赖于将某些目录作为搜索路径包含在内。但是,无论我尝试什么,我都无法让 CocoaPods.podspec文件在编译搜索路径中包含给定目录。我正在使用 CocoaPods 1.8.4

虽然这是一个 Flutter 插件,但据我了解,这是 CocoaPods/Xcode 的问题,因为 Flutter 仅设置了项目文件。然而,值得注意的是,Flutter 设置了一个示例工作区,我不想修改它。我希望修改插件本身以编译必需的代码,而不是示例工作区/项目。换句话说,我只想ios/repro_cocoapods_issue.podspec修改文件。

如果重要的话,我使用以下 Flutter 命令来创建项目:

flutter create -t plugin -i objc -a java repro_cocoapods_issue
Run Code Online (Sandbox Code Playgroud)

我在 GitHub上有完整的重现。要重现,请在 Xcode 中打开工作区example/ios/Runner.xcworkspace并尝试构建。

这些是我在文件中尝试过的事情ios/repro_cocoapods_issue.podspec

  • s.xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.user_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.user_target_xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.pod_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.pod_target_xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/external/"'}
  • s.compiler_flags …

xcode ios cocoapods

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