小编Rob*_*don的帖子

无法引用F#类库

此问题与标题中描述的完全相同.

我有一个便携式F#类库.我创建了一个ASP.NET核心Web应用程序(包括.NET Framework和.NET Core),我试图在其中添加对F#类库的引用.

尝试添加引用会给出一条消息:

以下项目不支持作为参考:

当前项目不支持项目类型,不能(原文如此)引用.

这非常令人失望,因为.NET Core现在处于通用可用性状态.

当这个bug得到解决时,有没有解决方法?

f# asp.net-core

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

是否可以创建一个测试,显示C#中双重检查锁定的失败?

所以这是我的双重检查锁定的自定义实用程序:它是一个静态方法,您可以在其中提供标准,同步对象和要执行的操作.

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#规范,优化器可以以这样的方式重新排序内存分配:在没有内存障碍的情况下,这种技术可以给出误报并在不应该执行时执行操作.

在我的小世界中,如果这种失败是可能的,那么还应该可以设计一个测试,通过足够多的并行测试用例来充分地使用场景来证明失败.我一直在寻找这样的测试大约一年,但到目前为止,我已经画了一个空白.谁能告诉我一个测试:

  1. 表明在没有记忆障碍的情况下该方法的失败;

  2. 当内存屏障恢复重复测试时,它显示了它的成功吗?

c# multithreading locking

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

无法打开Web项目,因为未安装IIS Express(即使它已安装)

我最近改变了工作中的机器,一个长期的Web项目现在拒绝在Visual Studio中打开.

错误日志显示为:"Web项目'xxx'配置为使用IIS Express.您必须下载并安装IIS Express才能加载此项目."

但是,IIS Express安装在此计算机上(与消息所说的相反),并且文件中的UseIISExpressUseIIS选项都设置为false csproj:

<UseIISExpress>False</UseIISExpress>
...
<UseIIS>False</UseIIS>
Run Code Online (Sandbox Code Playgroud)

我尝试过愚蠢的事情,比如在false和之间切换False,但到目前为止无济于事.还有什么我可以尝试的吗?

c# asp.net iis

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

F#中枚举的注释

我在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.

enums f#

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

F#,实体框架和可空值

这是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#中实体框架友好表达式的一部分?

f# entity-framework

7
推荐指数
0
解决办法
282
查看次数

如何修复Resource.Designer.fs的生成器,以便它转义语言关键字?

在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是生成的文件,所以我必须继续这样做.

这个文件是如何生成的?我将如何制作拉动请求来修复此错误?

f# xamarin.android xamarin.forms

6
推荐指数
0
解决办法
91
查看次数

Date.getDay()返回不同的值

我觉得我在这里错过了一些东西.

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日是星期日.为什么周六说?

javascript date

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

在 F# 中处理模式

在 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)

f# dispose

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

.NET Core:如何从命令行创建解决方案文件夹

我正在组织一个新项目,我想从命令行创建尽可能多的项目。

我喜欢将我的测试项目放入解决方案文件夹中。但是,该命令dotnet sln add似乎有些受限。它的参数列表似乎只包含要添加的项目文件列表。

在添加新创建的项目(在我的例子中是测试项目,但问题更一般)时,有没有办法指定解决方案文件夹(而不是物理文件夹)?

.net-core

6
推荐指数
3
解决办法
5371
查看次数

Xamarin Android:退出Java.exe并启用代码2-启用了MultiDex

在最新更新(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上创建了一个问题

如果有人能找到任何有效的解决方法,我将不胜感激。

xamarin.android xamarin visual-studio-2017

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