小编Edw*_*rey的帖子

如何使用WiX Burn智能地安装.NET 4.x.

安装可以使用.NET 4.0或4.5的应用程序时,安装先决条件.NET框架时的最佳做法是什么?你如何使用Burn in WiX实现它?

这些是我所知道的选项和权衡:

选项1:安装.NET 4.0(正如您所需)

  • 优点:未知(除了Windows XP,这是唯一的选择)

选项2:如果不存在.NET 4.5,请安装.NET 4.5

  • 优点:用户将来不必为将来的应用程序安装.NET 4.5.当用户稍后升级到.NET 4.5时,App将不会遇到.NET版本更改.应用程序立即获得.NET 4.5的性能改进.

选项3:仅当.NET 4.x不存在时才安装.NET 4.5

  • 优点:如果已安装.NET 4.0,则比选项2快得多.如果不是,则选项2的优点适用.

据我所知,如果性能改进很重要,最佳做法是选项2,如果平均部署速度很重要,则选择3.这听起来不错吗?我错过了选项1的任何优势吗?最重要的是,如果选项3确实有意义,那么在从Web安装.NET时如何使用Burn实现它?

bootstrapping windows-installer wix burn wix3.6

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

通过依赖注入执行后台任务的DbContext

我可能没想到正确的方向.我对Dependency Injection和ASP.Net Core相当新.

我有一个ASP.Net核心网站,其中一个任务是将数据从Excel工作表导入用户将上传的数据库.excel表格可能很大,数据转换任务也很耗时,因此我希望在后台执行它们.即用户将上传工作表,响应将立即发送,后台作业/线程将导入数据.

我正在尝试通过以下方式运行后台作业:

Task.Run(() => ProcessImport(model));
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是Process导入方法调用具有存储库类的服务,这些存储库类通过作为Scoped添加的ASP.Net依赖注入容器访问AppDbContext,并且一旦响应被发回,就会释放上下文.我收到一个运行时异常,你不能在它被处置后使用上下文.

我的问题是,处理这种情况的最佳方法是什么?我应该制作AppDbContext单例吗?我应该在ProcessImport方法中创建一个新的AppDbContext实例,并将其传递给它吗?我看过DbContext不是线程安全的,所以这是一个好方法吗?

dependency-injection background-process entity-framework-core asp.net-core-mvc asp.net-core

18
推荐指数
2
解决办法
7669
查看次数

如果可能有空集,如何进行Linq聚合?

我有一个Linq集合Things,其中Thing有一个Amount(十进制)属性.

我正在尝试针对特定事物的子集对此进行聚合:

var total = myThings.Sum(t => t.Amount);
Run Code Online (Sandbox Code Playgroud)

这很好用.但后来我添加了一个条件,让我在结果中没有任何东西:

var total = myThings.Where(t => t.OtherProperty == 123).Sum(t => t.Amount);
Run Code Online (Sandbox Code Playgroud)

而不是得到total = 0或null,我得到一个错误:

System.InvalidOperationException:无法将null值分配给类型为System.Decimal的成员,该成员是非可空值类型.

这真是令人讨厌,因为我没想到这种行为.我本来期望总数为零,也许是null - 但肯定不会抛出异常!

我究竟做错了什么?什么是解决方法/修复?

编辑 - 例子

感谢大家的评论.这是一些代码,复制和粘贴(未简化).它是LinqToSql(也许这就是为什么你无法重现我的问题):

var claims = Claim.Where(cl => cl.ID < 0);
var count = claims.Count(); // count=0
var sum = claims.Sum(cl => cl.ClaimedAmount); // throws exception
Run Code Online (Sandbox Code Playgroud)

c# linq aggregate linq-to-sql

17
推荐指数
2
解决办法
6507
查看次数

全局配置Angular指令

一些Angular UI Bootstrap指令(例如datepicker)具有如下配置指令:"所有设置都可以作为属性提供,也可以<datepicker>通过全局配置datepickerConfig."

虽然列出了配置选项,但没有描述我是什么*Config以及如何全局配置一个.听起来这是Angular的标准部分.是吗?我如何使用此配置模式,以及它在哪里记录?

configuration angularjs angular-ui-bootstrap

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

在Xamarin Forms visual studio中为Grasient添加渐变背景

我是Xamarin Forms的新手,我为Menu创建了一个ContentPage.我的背景需要线性渐变色.但我找不到任何告诉我如何创建背景渐变颜色的链接.我也希望在按钮背景的颜色位置像android中的选择器.如果您有任何信息,请给予回复.

c# cross-platform xamarin xamarin.forms visual-studio-2015

17
推荐指数
5
解决办法
3万
查看次数

在单元测试中模拟IMemoryCache

我正在使用asp net core 1.0和xunit.

我正在尝试为一些使用的代码编写单元测试IMemoryCache.但是每当我尝试在I中设置一个值时,IMemoryCache我都会得到一个Null参考错误.

我的单元测试代码是这样的:
IMemoryCache注入到我想要测试的类中.但是,当我尝试在测试中设置缓存中的值时,我得到一个空引用.

public Test GetSystemUnderTest()
{
    var mockCache = new Mock<IMemoryCache>();

    return new Test(mockCache.Object);
}

[Fact]
public void TestCache()
{
    var sut = GetSystemUnderTest();

    sut.SetCache("key", "value"); //NULL Reference thrown here
}
Run Code Online (Sandbox Code Playgroud)

这是班级测试......

public class Test
{
    private readonly IMemoryCache _memoryCache;
    public Test(IMemoryCache memoryCache)
    {
        _memoryCache = memoryCache;
    }

    public void SetCache(string key, string value)
    {
        _memoryCache.Set(key, value, new MemoryCacheEntryOptions {SlidingExpiration = TimeSpan.FromHours(1)});
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是......我需要以IMemoryCache某种方式设置吗?为DefaultValue设置一个值?当IMemoryCache被嘲笑什么是默认值?

c# unit-testing moq mocking asp.net-core

17
推荐指数
3
解决办法
8715
查看次数

在ASP.NET Core中获取强类型头类

如何System.Net.Http.Headers从ASP.NET Core控制器的命名空间中获取强类型头类?在派生的控制器中Controller,Request.Headers可用,但它只是返回IHeaderDictionary.还有一个扩展方法HeaderDictionaryTypeExtensions.GetTypedHeaders,但它返回RequestHeaders,它只有某些标题.该类HttpRequestHeaders具有最全面的标题列表,但不清楚如何访问它.

例如,你怎么会得到一个AuthenticationHeaderValue?一种选择是AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]),但这需要对头名称进行硬编码.也许有一种非硬编码方式HttpRequestHeaders.Authorization.

asp.net-controls http-headers asp.net-core

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

更新Xamarin的问题

我最近决定更新我的Xamarin工作区中的所有内容,包括所有nuget包和Xamarin表单.

我首先安装了所有最新的Xamarin.android.support软件包,这些软件包与当前版本的Xamarin表单发生了冲突,所以,决定我还需要更新Xamarin表单,删除它,安装所有其他软件包(工作很可爱) ,现在我想再次重新安装Xamarin表单,但我收到:

无法解析依赖项.'Xamarin.Android.Support.Design 23.4.0.1'与'Xamarin.Forms 2.3.0.107约束:Xamarin.Android.Support.Design(= 23.3.0)'不兼容.

有什么建议?

xamarin.android xamarin

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

为什么空集的总和为空?

如果我做:

int updateGamePlays = db.tblArcadeGames.Where(c => c.ParentGameID == GameID).Sum(c => c.Plays);
Run Code Online (Sandbox Code Playgroud)

如果此查询中未返回任何记录,则抛出:

System.InvalidOperationException:无法将null值分配给类型为System.Int32的成员,该成员是非可空值类型.

让它返回0的唯一方法是:

int updateGamePlays = db.tblArcadeGames.Where(c => c.ParentGameID == GameID).Sum(c => (int?)c.Plays) ?? 0;
Run Code Online (Sandbox Code Playgroud)

在数据库中c.Plays是一个不可为空的int.

在集合论中,空集的总和应该等于0(ref).Linq-to-SQL是如何决定让它返回的null呢?

linq math sum set linq-to-sql

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

HttpClient GetStreamAsync和HTTP状态代码?

我希望按照json.net性能提示文档的建议使用流,但是我无法找到如何获取http状态代码而没有典型的等待HttpResponse.

是否有一种方法可以在不读取数据的情况下首先获取状态代码?所以仍然利用流?

c# stream httpclient json.net

13
推荐指数
2
解决办法
2万
查看次数