小编Joh*_*ger的帖子

在Azure Web Apps中运行自托管OWIN应用程序

由于IIS8功能称为HttpPlatformHandler ,因此可以Azure Web Apps上运行suave.io应用程序.我尝试以相同的方式运行自托管的OWIN应用程序,但在启动时遇到异常:

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Net.HttpListenerException: Access is denied
   at System.Net.HttpListener.SetupV2Config()
   at System.Net.HttpListener.Start()
   at Microsoft.Owin.Host.HttpListener.OwinHttpListener.Start(HttpListener listener, Func`2 appFunc, IList`1 addresses, IDictionary`2 capabilities, Func`2 loggerFactory)
   at Microsoft.Owin.Host.HttpListener.OwinServerFactory.Create(Func`2 app, IDictionary`2 properties)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] …
Run Code Online (Sandbox Code Playgroud)

azure azure-web-sites kudu owin suave

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

使用"yield"时,为什么编译器生成的类型同时实现IEnumerable和IEnumerator

我们正在尝试使用a IEnumerable作为工厂,每次迭代时都会生成不同的对象.那些应该尽快GC.但请注意,我们保留对枚举器的引用,以便我们可以再次调用它.所以我们的程序基本上是这样的:

public class YieldSpec
{
    public static IEnumerable<string> Strings()
    {
        yield return "AAA";
        yield return "BBB";
        yield return "CCC";
    } 
    public void YieldShouldAllowGC()
    {
        var e = Strings();
        foreach (var a in e)
        {
            Console.WriteLine(a);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

在调试器中查看该代码:

在此输入图像描述

您可以看到,当遇到断点时,IEnumerable会引用"CCC".

这不应该真的发生.IEnumerable应该只在调用GetEnumerator时生成IEnumerator.这是IEnumerable可以包含状态的预期行为吗?

.net c# linq garbage-collection yield-return

10
推荐指数
1
解决办法
248
查看次数

TeamCity为新分支触发了太多构建

当我B从分支创建一个新分支A并执行单个提交时,TeamCity会触发多个构建B,尽管我只期望一个构建.
我将"在每次签入时触发构建"设置为true,但是应该只有一个构建,因为只有一个新的提交.似乎TeamCity在当前月份内触发每个提交的构建.A完成所有分支构建,并使用相同的构建配置来构建分支AB.我是否可以将TeamCity配置为仅针对尚未构建的提交创建构建(无论在哪个分支上)?

git teamcity continuous-integration build feature-branch

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

在CoreCLR中运行F#

我按照这里描述编译了CoreCLRCoreFX.基本上,我可以编译和运行针对CoreCLR的C#代码. 下一步是尝试编译和运行F#代码.所以我将FSharp.Core 3.1.2.1添加到项目中,并使用以下命令编译了一个示例应用程序:

fsc ^
--noframework ^
--targetprofile:netcore ^
/r:packages\System.Runtime.4.0.20-beta-22703\lib\contract\System.Runtime.dll ^
/r:packages\System.Reflection.4.0.10-beta-22703\lib\contract\System.Reflection.dll ^
/r:packages\System.Collections.4.0.10-beta-22703\lib\contract\System.Collections.dll ^
/r:packages\System.Diagnostics.Debug.4.0.10-beta-22703\lib\contract\System.Diagnostics.Debug.dll ^
/r:packages\System.IO.FileSystem.4.0.0-beta-22703\lib\contract\System.IO.FileSystem.dll ^
/r:packages\System.Linq.Expressions.4.0.10-beta-22703\lib\contract\System.Linq.Expressions.dll ^
/r:packages\System.Console.4.0.0-beta-22703\lib\contract\System.Console.dll ^
/r:packages\System.Runtime.Extensions.4.0.10-beta-22703\lib\contract\System.Runtime.Extensions.dll ^
/r:packages\System.Runtime.InteropServices.4.0.20-beta-22703\lib\contract\System.Runtime.InteropServices.dll ^
/r:packages\System.Text.Encoding.4.0.10-beta-22703\lib\contract\System.Text.Encoding.dll ^
/r:packages\System.Text.RegularExpressions.4.0.10-beta-22703\lib\contract\System.Text.RegularExpressions.dll ^
/r:packages\System.Threading.Overlapped.4.0.0-beta-22703\lib\contract\System.Threading.Overlapped.dll ^
/r:packages\System.Threading.ThreadPool.4.0.10-beta-22703\lib\contract\System.Threading.ThreadPool.dll ^
/r:packages\FSharp.Core.3.1.2.1\lib\portable-net45+netcore45+MonoAndroid1+MonoTouch1\FSharp.Core.dll ^
/out:runtime\HelloWorld.exe HelloWorld.fs
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我构建了FSharp.Core的Profile7.当我运行应用程序时,语句let test = sprintf "Hello, world"失败并出现以下异常:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the …
Run Code Online (Sandbox Code Playgroud)

c# f# coreclr

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

使用Observable.FromEvent转换没有EventArgs的事件

我正在努力将以下事件转换为IObservable:

public delegate void _dispSolutionEvents_OpenedEventHandler();
event _dispSolutionEvents_OpenedEventHandler Opened;
Run Code Online (Sandbox Code Playgroud)

该活动来自图书馆,所以我无法改变它.IObservable.FromEvent应该做的重载具有以下签名:

public static IObservable<Unit> FromEvent
    ( Action<Action> addHandler
    , Action<Action> removeHandler
    )
Run Code Online (Sandbox Code Playgroud)

所以我尝试转换这样的事件:

var opened = Observable.FromEvent
    ( h => _SolutionEvents.Opened += h
    , h => _SolutionEvents.Opened -= h
    );
Run Code Online (Sandbox Code Playgroud)

但是编译器并不喜欢_SolutionEvents.Opened += h_SolutionEvents.Opened += h因为

无法将类型'System.Action'隐式转换为'EnvDTE._dispSolutionEvents_OpenedEventHandler'.

我不认为我可以说,_SolutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler(h)因为那时删除不起作用,因为我有一个不同的实例,对吧?

还有另一个Observable.FromEvent带有以下签名的重载:

public static IObservable<TEventArgs> FromEvent<TDelegate, TEventArgs>
    ( Func<Action<TEventArgs>, TDelegate> conversion
    , Action<TDelegate> addHandler
    , Action<TDelegate> removeHandler
    )
Run Code Online (Sandbox Code Playgroud)

这个允许将操作转换为事件处理程序,但似乎只能使用TEventArgs. …

c# events system.reactive

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

使用 FSharpPlus 的 Reader monad 转换器示例

我试图理解读者单子转换器。我正在使用FSharpPlus并尝试编译以下示例,该示例首先从阅读器环境中读取某些内容,然后执行一些异步计算,最后合并两个结果:

open FSharpPlus
open FSharpPlus.Data

let sampleReader = monad {
    let! value = ask
    return value * 2
}

let sampleWorkflow = monad {
    do! Async.Sleep 5000
    return 4
}

let doWork = monad {
    let! envValue = sampleReader
    let! workValue = liftAsync sampleWorkflow
    return envValue + workValue
}

ReaderT.run doWork 3 |> Async.RunSynchronously |> printfn "Result: %d"
Run Code Online (Sandbox Code Playgroud)

有了这个,我在它显示的行出现编译错误,let! value = ask并显示以下完全无用的(至少对我来说)错误消息:

将默认类型“obj”应用于类型推断变量时,类型约束不匹配。没有与方法“op_GreaterGreaterEquals”匹配的重载。

已知返回类型:异步

已知类型参数:< obj , (int -> Async) >

感觉就像我只是在某个地方缺少一些操作员,但我无法弄清楚。

f# monad-transformers f#+

3
推荐指数
1
解决办法
718
查看次数

System.Version没有在F#中实现System.IComparable

我想Version在F#中对一系列对象进行排序:

let maxVersion =
    versions
    |> Seq.max (fun version -> version)
Run Code Online (Sandbox Code Playgroud)

编译器生成以下错误消息:

类型'(seq - >'a)'不支持'比较'约束.例如,它不支持"System.IComparable"接口

当我在Visual Studio中点击F12来查看Version它的元数据时说Version它只实现了ICloneable,但没有实现IComparable.但是,当我访问sourceof.net时,它表示它实现的功能IComparable与其他一些接口一样.

F#是否使用不同版本的.NET框架?

.net c# f# icomparable base-class-library

2
推荐指数
1
解决办法
202
查看次数