3

別の会社から一連の C# コードを引き継いだばかりで、最初のビルドを機能させるのに大きな問題があります。このコードでは、MVC の代わりに Nancy というフレームワークを使用しています。私はこれまでこのフレームワークを使用したことがありません。私の質問に対する本当の簡単な答えがあるかもしれません。ここに投稿する前に、ナンシーの基本的な理解を逃した場合はお詫びします。

問題は、アプリケーションの初期化を処理する単一のクラスに要約されます (私は思います) 私が読んだことから、それはかなり標準的なナンシーです:

using System;
using Nancy;
using NewRelicAgent = NewRelic.Api.Agent.NewRelic;
using Nancy.Bootstrapper;
using Nancy.Routing;

public class NewRelicStartup : IApplicationStartup
  {

    private readonly IRouteResolver routeResolver;
    public NewRelicStartup (IRouteResolver routeResolver)
    {
        this.routeResolver = routeResolver;
    }
    public void Initialize(IPipelines pipelines)
    {

        pipelines.BeforeRequest.AddItemToStartOfPipeline(
            context =>
            {
            var route = routeResolver.Resolve(context);
            if (route == null || route.Item1 == null || route.Item1.Description == null) // probably not necessary but don't want the chance of losing visibility on anything
            {
                NewRelicAgent.SetTransactionName(
                    context.Request.Method, 
                    context.Request.Url.ToString());
            }
            else
            {
                NewRelicAgent.SetTransactionName(
                    route.Item1.Description.Method,
                    route.Item1.Description.Path);
            }
            return null;
        });

        pipelines.OnError.AddItemToEndOfPipeline(
                (context, ex) => {
                    NewRelicAgent.NoticeError(ex);
                    return null;
                }
        );
    }
}

このコードがビルドされているときに、いくつかのエラーが発生します。その一部は次のとおりです。

Delegate 'System.Func<Nancy.NancyContext,System.Threading.CancellationToken,System.Threading.Tasks.Task<Nancy.Response>>' does not take 1 arguments

Cannot convert lambda expression to type 'Nancy.PipelineItem<System.Func<Nancy.NancyContext,System.Threading.CancellationToken,System.Threading.Tasks.Task<Nancy.Response>>>' because it is not a delegate type 

これは、私が得るエラーの種類のスクリーンショットです:

https://www.dropbox.com/s/cigcfc4sfj8batg/Nancy%20Error.PNG

コードはライブ atm であるため、これは Visual Studio 側の何らかの解釈の問題であると 100% 確信しています。私はVSでそれを構築することはできません。

私が見逃している、または間違っていることを知っている人はいますか? 覚えて; コードは機能しており、atm が稼働しています。

4

1 に答える 1

3

「return null;」を変更してみてください。「(Nancy.Response)nullを返す」に

編集:申し訳ありませんが、スクリーンショットを見ただけです-0.20で変更されたいくつかのプロパティを使用しているため、手動でコードを修正する必要があります(現在、コアで非同期になっています)、または今のところ0.19にロールバックして、再-後日そのコードを書きます。

もう一度編集: 前にこれを与える:

        pipelines.BeforeRequest.AddItemToStartOfPipeline(
        context =>
        {
            var route = routeResolver.Resolve(context);

            if (route == null || route.Route == null || route.Route.Description == null) // probably not necessary but don't want the chance of losing visibility on anything
            {
                NewRelicAgent.SetTransactionName(
                    context.Request.Method,
                    context.Request.Url.ToString());
            }
            else
            {
                NewRelicAgent.SetTransactionName(
                    route.Route.Description.Method,
                    route.Route.Description.Path);
            }
            return null;
        });
于 2013-09-24T13:46:54.333 に答える