此问题与标题中描述的完全相同.
我有一个便携式F#类库.我创建了一个ASP.NET核心Web应用程序(包括.NET Framework和.NET Core),我试图在其中添加对F#类库的引用.
尝试添加引用会给出一条消息:
以下项目不支持作为参考:
当前项目不支持项目类型,不能(原文如此)引用.
这非常令人失望,因为.NET Core现在处于通用可用性状态.
当这个bug得到解决时,有没有解决方法?
所以这是我的双重检查锁定的自定义实用程序:它是一个静态方法,您可以在其中提供标准,同步对象和要执行的操作.
public static bool RunIf(Func<bool> criterion, object syncObject, Action action)
{
if (criterion())
lock(syncObject)
if (criterion())
{
Thread.MemoryBarrier();
action();
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我了解到,根据C#规范,优化器可以以这样的方式重新排序内存分配:在没有内存障碍的情况下,这种技术可以给出误报并在不应该执行时执行操作.
在我的小世界中,如果这种失败是可能的,那么还应该可以设计一个测试,通过足够多的并行测试用例来充分地使用场景来证明失败.我一直在寻找这样的测试大约一年,但到目前为止,我已经画了一个空白.谁能告诉我一个测试:
表明在没有记忆障碍的情况下该方法的失败;
当内存屏障恢复重复测试时,它显示了它的成功吗?
我最近改变了工作中的机器,一个长期的Web项目现在拒绝在Visual Studio中打开.
错误日志显示为:"Web项目'xxx'配置为使用IIS Express.您必须下载并安装IIS Express才能加载此项目."
但是,IIS Express安装在此计算机上(与消息所说的相反),并且文件中的UseIISExpress和UseIIS选项都设置为false csproj:
<UseIISExpress>False</UseIISExpress>
...
<UseIIS>False</UseIIS>
Run Code Online (Sandbox Code Playgroud)
我尝试过愚蠢的事情,比如在false和之间切换False,但到目前为止无济于事.还有什么我可以尝试的吗?
我在F#中有一个枚举:
type Gender = Undisclosed = 0 | Male = 1 | Female = 2
Run Code Online (Sandbox Code Playgroud)
等效的C#代码
public enum Gender
{
Undisclosed,
Male,
Female
}
Run Code Online (Sandbox Code Playgroud)
事实上,在C#中,我可以更好一步.要在cshtml页面的下拉列表中使用性别,我可以这样做:
public enum Gender
{
[Display(ResourceType = typeof(LocalisedStrings), Name = "GenderUndisclosed")] Undisclosed,
[Display(ResourceType = typeof(LocalisedStrings), Name = "GenderMale")] Male,
[Display(ResourceType = typeof(LocalisedStrings), Name = "GenderFemale")] Female
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果我尝试向F#enum成员添加类似的注释,F#编译器会说"这里不允许使用属性".有没有解决的办法?如果可能的话,我想避免创建一个重复的类并执行Automapper voodoo.
这是F#中一个极其困难的问题,在C#中非常容易
我正在使用自定义DomainManager在F#中编写Azure移动应用程序表控制器.该DomainManager所继承MappedEntityDomainManager<,>,它采用Automapper在幕后来映射我的数据库对象转换成适合移动设备的记录.
Automapper配置文件如下所示:
type EventOrganiserProfile() =
inherit Profile()
do
let nullDateTime = Nullable<DateTime>()
base.CreateMap<MyDbEntity, MyMobileDto>()
...
.ForMember(fun dest -> dest.UpdatedAt, fun opt -> opt.MapFrom(fun src -> if src.CancelledUtc <> nullDateTime then src.CancelledUtc.Value else src.StartedUtc))
...
|> ignore
base.CreateMap<MyMobileDto, MyDbEntity>()
...
|> ignore
Run Code Online (Sandbox Code Playgroud)
src.StartedUtc是一个DateTime,src.CancelledUtc是一个可空的DateTime,因为它的类继承自的EntityData,dest.UpdatedAt是一个可空的DateTimeOffset.
此代码编译,但当我尝试运行它时,我收到错误消息
System.NotSupportedException:'LINQ to Entities无法识别方法'System.DateTime Invoke(System.Nullable`1 [System.DateTime])'方法,并且此方法无法转换为商店表达式.
这似乎指的是我对.Value财产的使用Nullable<DateTime>.根本原因是F#严格的类型检查.在C#中,这将由空合并运算符无缝处理??.
有没有办法模拟空合并作为F#中实体框架友好表达式的一部分?
在Visual Studio中从F#模板创建一个空白的Android应用程序.
添加Xamarin.Forms NuGet包.
建立项目.
由于以下行,构建失败Resource.Designer.fs:
static member end = 2131165212
Run Code Online (Sandbox Code Playgroud)
因为end是F#中的关键字,所以错误在"成员定义"中显示"Unexpected keyword'end'.
有一个修复:您可以替换end如下:
static member ``end`` = 2131165212
Run Code Online (Sandbox Code Playgroud)
但是,Resource.Designer.fs是生成的文件,所以我必须继续这样做.
这个文件是如何生成的?我将如何制作拉动请求来修复此错误?
我觉得我在这里错过了一些东西.
Date.getDay()方法应该返回0-6之间的值.星期日为0,星期六为6.
现在我有两个日期,两个都是'星期日',应该返回0.
new Date('1990-11-11').getDay() // returns 6
new Date('2016-1-3').getDay() // returns 0
Run Code Online (Sandbox Code Playgroud)
造成这种差异的原因是什么?我敢问这个.getDay()方法的有效性,但我无法弄清楚发生了什么.
编辑
> new Date('1990-11-11')
Sat Nov 10 1990 17:00:00 GMT-0700 (MST)
> new Date('2016-01-03')
Sat Jan 02 2016 17:00:00 GMT-0700 (MST)
> new Date('2016-1-3') // they say this format is wrong, but it returns the right date
Sun Jan 03 2016 00:00:00 GMT-0700 (MST)
Run Code Online (Sandbox Code Playgroud)
我不明白发生了什么.1月3日是星期日,1990年11月11日是星期日.为什么周六说?
在 F# 中,继承不像在 C# 中那么常见,但这并不意味着它从未被使用过。
如果我从 C# 中实现的类型继承IDisposable,我通常会使用Dispose 模式来抑制终结器。但是,我无法直接在 F# 中执行此操作,因为没有protected访问修饰符。
我在网上搜索了 F# 中 Dispose 模式的实现,但我只找到了对Dispose(). 是否有一种模式可以让我释放派生类中的非托管资源,同时仍然抑制终结器以优化性能?
为了使这个问题稍微不那么抽象,这是一个我想继承的典型抽象基类型:
[<AbstractClass>]
type ContentPage<'TViewModel, 'TView when 'TViewModel :> ReactiveViewModel and 'TViewModel : not struct>(theme: Theme) as this =
inherit ContentPage()
let messageReceived (message: AlertMessage) = this.DisplayAlert(message.Title, message.Message, message.Accept) |> ignore
let mutable viewModel, listener = Unchecked.defaultof<'TViewModel>, Observable.Never<AlertMessage>().Subscribe(messageReceived)
do base.BackgroundColor <- theme.Styles.BackgroundColor
member __.ViewModel with get() = viewModel and set(value: 'TViewModel) = listener.Dispose(); viewModel <- value; …Run Code Online (Sandbox Code Playgroud) 我正在组织一个新项目,我想从命令行创建尽可能多的项目。
我喜欢将我的测试项目放入解决方案文件夹中。但是,该命令dotnet sln add似乎有些受限。它的参数列表似乎只包含要添加的项目文件列表。
在添加新创建的项目(在我的例子中是测试项目,但问题更一般)时,有没有办法指定解决方案文件夹(而不是物理文件夹)?
在最新更新(Xamarin.Android.Support库,V28.0.0,构建工具28.0.3)之后,每个构建都因
代码2退出了“ java.exe”
我以前启用了Multi-Dex来解决此问题,直到现在,它一直没有问题。我还尝试了重新启用ProGuard,并按照此答案执行了所有步骤,包括更改了MainDexClasses.bat。
有几个新的警告,但是我无法确定它们是否引起了新的问题:
CREATEMULTIDEXMAINDEXCLASSLIST:警告:无法写入资源[META-INF / maven / com.squareup.okio / okio / pom.xml](重复的zip条目[okio.jar:META-INF / maven / com.squareup.okio / okio /pom.xml])
CREATEMULTIDEXMAINDEXCLASSLIST:警告:无法写入资源[META-INF / maven / com.squareup.okio / okio / pom.properties](重复的zip条目[okio.jar:META-INF / maven / com.squareup.okio / okio /pom.properties])
更新:看来这是V28 SDK附带的一个bug。https://github.com/SpiegelSoft/Repro上有一个repro ,我在https://github.com/xamarin/xamarin-android/issues/2565上创建了一个问题
如果有人能找到任何有效的解决方法,我将不胜感激。