我想在WPF(.NET 4.6)应用程序和.NET Core应用程序之间共享项目.为此,我通过最初创建一个可移植的库并在Visual Studio 2015中将其转换为.NETStandard 1.3版来创建.NET标准库.
但是,.NETStandard库需要引用Entity Framework(例如),所以我在project.json中添加了这个依赖项,所有内容都很愉快.但是,当我实际运行应用程序时,只要实际尝试使用Entity Framework库加载数据,我就会收到File Not Found异常.这是预期的,因为使用.NETStandard时没有任何nuget包被复制到输出目录(不像使用nuget用于普通的.NET),所以我可以看到异常的原因.
当使用.NETStandard库并从.NET 4.6项目引用时,如何解决此问题/获取要复制到输出的nuget依赖项?(下面是我的project.json,并且很乐意在需要时添加更多代码).
{
"supports": {},
"dependencies": {
"Microsoft.EntityFrameworkCore.Design": "1.1.0",
"Microsoft.EntityFrameworkCore.Sqlite": "1.1.0",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.1"
},
"frameworks": {
"netstandard1.3": {}
}
}
Run Code Online (Sandbox Code Playgroud) 我在.NET中划分两个双精度并使用结果对象通过调用(dtStart是预定义的)从开始日期计算结束日期:
var dValue = 1500.0/8400.0;
var dtEnd = dtStart.AddDays(dValue);
Run Code Online (Sandbox Code Playgroud)
在检查dtEnd之后,我发现结果只精确到最接近的毫秒.在查找之后,我发现.AddMilliseconds等全部围绕数字而TimeSpan.FromDays做了类似的事情.我想知道是否有理由为什么这个舍入已经完成,因为看起来这里获得正确值的唯一方法是使用.AddTicks?
供参考.AddDays调用(其中MillisPerDay = 86400000)
public DateTime AddDays(double value)
{
return Add(value, MillisPerDay);
}
Run Code Online (Sandbox Code Playgroud)
哪个叫
private DateTime Add(double value, int scale)
{
long millis = (long)(value * scale + (value >= 0? 0.5: -0.5));
if (millis <= -MaxMillis || millis >= MaxMillis)
throw new ArgumentOutOfRangeException("value", Environment.GetResourceString("ArgumentOutOfRange_AddValue"));
return AddTicks(millis * TicksPerMillisecond);
}
Run Code Online (Sandbox Code Playgroud) 我在桌面解决方案中使用.NET标准库,因此我可以在桌面和Web解决方案之间共享这些库.但是,我现在看到增量构建问题.有没有其他人经历过这个或设法修复它?
我可以看到.NET标准库有一些增量构建功能,如果我使用"dotnet build"在命令行上构建它们,例如1秒,然后如果我在该库中进行代码更改并运行再过需要2秒钟.如果我第三次跑,这可以追溯到1秒.
但是,在纯.NET框架应用程序(如控制台应用程序或wpf应用程序)中,传统上如果不进行代码更改,那么在visual studio中它甚至不会尝试构建项目.它简单地说"1最新".我看到.NET标准库总是被重新复制到输出目录,它们也会导致我的整个WPF项目每次都重建.一段时间后,如果每个代码更改需要5秒钟来构建,这会开始变得烦人!