タグ付けされた質問 「c#」

C#(「seesharp」と発音)は、Microsoftによって開発された、静的に型指定された高レベルのマルチパラダイムプログラミング言語です。C#コードは通常、Microsoftの.NETファミリのツールとランタイムを対象としています。これには、.NET Framework、.NET Core、Xamarinなどが含まれます。このタグは、C#またはC#の正式な仕様で記述されたコードに関する質問に使用します。

1
netcore api 3.1でAuthorizationFilterContextを読み取る
APIキーをチェックするカスタムポリシーを実装したnetcore 2.2プロジェクトが機能しています。 startup.csに私はこのようにこのポリシーを追加しています //Add Key Policy services.AddAuthorization(options => { options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement())); }); 私のAppKeyRequirementでは、AuthorizationHandlerから継承し、次のように着信リクエストのキーを解決します protected override Task HandleRequirementAsync(AuthorizationHandlerContext authContext, AppKeyRequirement requirement) { var authorizationFilterContext = (AuthorizationFilterContext)authContext.Resource; var query = authorizationFilterContext.HttpContext.Request.Query; if (query.ContainsKey("key") && query.ContainsKey("app")) { // Do stuff これはnetcore 3.1では機能しません 次のエラーが発生します。 タイプ「Microsoft.AspNetCore.Routing.RouteEndpoint」のオブジェクトをタイプ「Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext」にキャストできません。 コア3以上でこれを行う正しい方法は何ですか? Kirk Larkinが指摘したように、.net 3.0以降での正しい方法は、IHttpContextAccessorをAuthハンドラーに挿入して使用することです。 この時点での私の質問は、これをどのように注入するのですか?これをstartup.csで渡すことはできません。少なくとも方法はわかりません。 どんなアイデア/ヒントも大歓迎です。

1
デストラクタのガベージコレクタの動作
以下のように定義された単純なクラスがあります。 public class Person { public Person() { } public override string ToString() { return "I Still Exist!"; } ~Person() { p = this; } public static Person p; } メインメソッドで public static void Main(string[] args) { var x = new Person(); x = null; GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine(Person.p == null); …

1
.Net Core 3 IStringLocalizer.WithCulture(CultureInfo)は廃止されました
プロジェクトを.Net Core 2.2から.Net Core 3.0にアップグレードしました。 すべての警告とエラーを修正しようとした後、私は今この警告の解決策に資金を提供しようとしています: 'IStringLocalizer.WithCulture(CultureInfo)' is obsolete: 'This method is obsolete. Use `CurrentCulture` and `CurrentUICulture` instead.' これを使用して、ログインしているユーザーごとにWebサイトの言語を変更しています。ユーザーごとのウェブサイトカルチャーを変更するためのこの実装があります。 public class CultureLocalizer : ICultureLocalizer { private readonly IStringLocalizer localizer; public CultureLocalizer(IStringLocalizerFactory factory) { var type = typeof(Resources.PageResources); var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName); localizer = factory.Create("PageResources", assemblyName.Name); } // if we …

1
Azure App Configurationから.netコア構成を動的に更新する
私がやろうとしていること: Azure App Configurationで.netコア2.1 mvc Webアプリケーションを使用してAzure App Configurationをセットアップし、Azure App Configurationのキーを変更できるようにすることを目標としています。センチネル値が変更されるまで、私のアプリで更新されます。理論的には、これにより構成を安全にホットスワップできるようになります。 私の問題は何ですか: これを行うと、IWebHostBuilderのセンチネルを監視するために使用できるWatchAndReloadAll()メソッドがなくなり、代替のRefresh()メソッドは、状態を示すように構成を更新しないようです。 背景情報、および私が試したこと: この1週間、VS Live-San Diegoに参加し、Azure App Configurationのデモを見ました。アプリケーションにインプリメントするときに設定値を更新する際に問題が発生したため、これを行う方法を説明するこのデモも参照しました。関連セクションは約10分です。ただし、そのメソッドはIWebHostBuilderで使用できないようです。 私が参照しているドキュメント: 公式ドキュメントでは、このメソッドへの参照はありません。docquickstart .net coreおよびdoc dynamic configuration .net coreを参照してください 私の環境: Microsoft.Azure.AppConfiguration.AspNetCore 2.0.0-preview-010060003-1250の最新プレビューナゲットパッケージを使用して、Visual Studio Enterprise 2019から実行されているドットネットコア2.1を使用しています 私のコード: デモでは、次のようにCreateWebHostBuilder(string [] args)メソッドを介してIWebHostBuilderを作成しました。 public static IWebHostBuilder CreateWebHostBuilder(string[] args) { return WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { var settings …

1
コンソールアプリ(.NET Core)が「exited with code 0」を出力しないようにします。VS2019で
Visual Studio Community 2019(バージョン16.3.1)でCtrl + F5(デバッグなしで開始)を使用してコンソールアプリ(.NET Core)を起動すると、コンソールウィンドウの最後に次のメッセージが追加されます。 C:\ HelloWorld \ bin \ Debug \ netcoreapp3.0 \ HelloWorld.exe(プロセス1672)はコード0で終了しました。 using System; namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } } Visual Studio 2019がこのメッセージを印刷しないようにする方法はありますか?私はから解決策を試してみまし出力ウィンドウに表示されてから同様のメッセージを防止オプションを変更することで、[ツール]> [オプション]> [デバッグ]> [出力]ウィンドウ>プロセス終了メッセージ=オフ、それはコンソールウィンドウでは効果がありません。 注:このメッセージはVisual Studio 2017では表示されません。VisualStudio 2019でのみ表示され、.NET Coreアプリでのみ表示されます。

1
リクエストヘッダーがIdentityServer4に転送されない
認証にIdentityServer4を使用するマイクロサービスのAPIゲートウェイとしてocelotを使用しています。ocelot設定ファイルに「AuthenticationOptions」を追加して、apiキーを設定しました。ではスタートアップ Iは、Identityサーバーを追加します。IDサーバーでは、ヘッダーの値を使用して、接続文字列を動的に構築します。トークンを取得するリクエストを送信すると、IDサービスでヘッダーにアクセスできます。しかし、トークンを使用して次のリクエストを送信すると、元のヘッダーが使用できません。IDサービスで表示できるのは「Host」ヘッダーのみです。 リクエストをアイデンティティサーバーにルーティングする間、元のヘッダーを保持する方法はありますか? Startup.cs(IDサーバーの追加) services .AddAuthentication() .AddIdentityServerAuthentication("APIParts", options => { options.Authority = "http://localhost:60168"; options.RequireHttpsMetadata = false; options.ApiName = "Parts"; options.SupportedTokens = SupportedTokens.Both; }); ocelot.json ReRoutes": [ { "DownstreamPathTemplate": "/connect/token", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 60168 } ], "UpstreamPathTemplate": "/token", "UpstreamHttpMethod": [ "Post" ] }, { "DownstreamPathTemplate": "/api/Parts/Inventory", …

2
Visual Studioが生成されたハッシュコード計算に「-1937169414」を追加するのはなぜですか?
Visual Studio独自のリファクタリングメニューを使用して、次のようにGetHashCode実装をクラスに追加する場合: クラスで唯一のintプロパティを選択します。 .NET Frameworkでこのコードを生成します。 public override int GetHashCode() { return -1937169414 + Value.GetHashCode(); } (HashCode.Combine(Value)代わりに.NET Core で生成されますが、同じ値が含まれるかどうかはわかりません) この値の特別な点は何ですか?Visual StudioがValue.GetHashCode()直接使用しないのはなぜですか?私が理解しているように、それは実際にはハッシュ配布に影響を与えません。これは単なる加算なので、連続する値は引き続き一緒に蓄積されます。 編集:私はこれをValueプロパティを持つ異なるクラスでのみ試しましたが、明らかにプロパティ名は生成される数に影響します。たとえば、プロパティの名前をに変更するHalueと、番号は387336856になります。これを指摘してくれたGökhanKurtに感謝します。

2
IEnumerable.ToObservableが非常に遅いのはなぜですか?
私は大規模な列挙しようとしていますIEnumerable一度、および添付のさまざまな演算子(と列挙を観察しCount、Sum、Averageなど)。明白な方法は、それをIObservableメソッドToObservableでに変換し、オブザーバーをサブスクライブすることです。これは、単純なループを実行して各反復でオブザーバーに通知する、またはObservable.Create代わりにメソッドを使用するなど、他のメソッドよりもはるかに遅いことに気付きましたToObservable。違いはかなり大きく、20〜30倍遅くなります。それはそれが何であるか、または私は何か間違ったことをしていますか? using System; using System.Diagnostics; using System.Linq; using System.Reactive.Disposables; using System.Reactive.Linq; using System.Reactive.Subjects; using System.Reactive.Threading.Tasks; public static class Program { static void Main(string[] args) { const int COUNT = 10_000_000; Method1(COUNT); Method2(COUNT); Method3(COUNT); } static void Method1(int count) { var source = Enumerable.Range(0, count); var subject = new Subject<int>(); var …

1
Programクラスは静的である必要がありますか?
新しいASP.NET Core 3プロジェクトを作成した後、Visual Studio 2019で次の警告が表示されます。 警告CA1052タイプ「プログラム」は静的ホルダータイプですが、静的でもNotInheritableでもありません public class Program { public static void Main(string[] args) { // ... } public static IHostBuilder CreateHostBuilder(string[] args) => // ... } 対 public static class Program { public static void Main(string[] args) { // ... } public static IHostBuilder CreateHostBuilder(string[] args) => // …

1
失敗した.NET単体テストをPowerShellスクリプトまたは.NETから再実行する
Azure DevopsのVisual Studio Testタスクには、非常に優れた機能があり、失敗した単体テストを再試行できます。これは、テスト時間が長く、不安定なテストがいくつかある場合に優れた機能です。Azure Devopsのこのテストタスクは、xUnit、NUnit、MSTestなどのさまざまなテストプラットフォームで機能します。(したがって、.NET用に書かれたテスト) スクリプトから同じ動作を取得することは可能ですか?私はxUnitまたはNUnitを好み、PowerShellでスクリプトを実行します。 xUnitの場合-method "name": 指定されたテストメソッドを実行します(完全に指定することも、ワイルドカードを使用することもできます(例: 'MyNamespace.MyClass.MyTestMethod'または '* .MyTestMethod')。複数回指定した場合、OR操作として機能します。 NUnitには--where=EXPRESSION構文ソースがあります。 実行するテストを示す式。演算子==、!=、=〜および!〜を使用して実際の値と比較するテスト名、クラス、メソッド、カテゴリ、またはプロパティを指定できます。構文の詳細については、テスト選択言語を参照してください。 しかし、xUnitまたはNUnitの失敗したテストを収集してすべてを機能させる方法はわかりません。 もちろん、不安定なテストを修正する方が良いでしょうが、それは時々それほど簡単ではありません。 更新:から実行しています。NET / C#(PowerShellでトリガーされる可能性があります)も許容されます

3
JwtBearerEvents.OnMessageReceivedが最初の操作の呼び出しで呼び出されない
IDプロバイダー(IDP)としてWSO2を使用しています。「X-JWT-Assertion」というヘッダーにJWTを配置しています。 これをASP.NET Coreシステムにフィードするために、OnMessageReceivedイベントを追加しました。これによりtoken、ヘッダーで指定された値にを設定できます。 ここに私がそれをしなければならないコードがあります(重要な部分は非ブラケットコードの最後の3行です): services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; }) .AddCookie() .AddJwtBearer(async options => { options.TokenValidationParameters = await wso2Actions.JwtOperations.GetTokenValidationParameters(); options.Events = new JwtBearerEvents() { // WSO2 sends the JWT in a different field than what is expected. // This allows us to feed it in. OnMessageReceived …

1
ポインターを使用して読み取り専用フィールドを変更できますか?しかし、なぜ?
私はC ++の出身で、C ++とC#のポインター間で非常に異なる動作を見つけます。 意外にも、このコードはコンパイルできます...そしてさらに...完全に動作します。 class C { private readonly int x = 0; unsafe public void Edit() { fixed (int* p = &x) { *p = x + 1; } Console.WriteLine($"Value: {x}"); } } これは私を非常に困惑させます、C ++でもconstオブジェクトを保護するメカニズムがあります(constC ++ではreadonlyC#ではなくC#とほぼ同じですconst)、ポインターを介してconst値を任意に変更する十分な理由がないためです。 さらに調べてみると、C#にはC ++の低レベルのconstポインターに相当するものはなく、次のようになります。 readonly int* p C#の場合。 その場合、pはポイントされたオブジェクトのみを読み取ることができ、それに書き込むことはできません。 また、constオブジェクトの場合、C#はアドレスを取得する試みを禁止しました。 C ++では、これを変更しようとするconstと、コンパイルエラーまたは未定義の動作になります。C#では、これを利用できる可能性があるかどうかわかりません。 だから私の質問は: この動作は本当に明確ですか?C#では知っていますが、C ++にはUBのような概念はありません …

2
ドラッグ中にマウスカーソルで画像のサムネイルを表示
Imageコントロール付きのウィンドウを持つ小さなWPFアプリケーションがあります。画像コントロールは、ファイルシステムからの画像を表示します。ユーザーが画像をドラッグしてデスクトップまたは任意の場所にドロップして保存できるようにしたい。正常に動作しています。 しかし、ユーザーがドラッグしたときに、マウスカーソルと共に小さな画像のサムネイルを表示したいと思います。Windowsファイルエクスプローラーから別の場所に画像をドラッグするのと同じです。それを達成する方法は? ドラッグ/ドロップの現在の動作 望ましい行動 これが私のXAMLコードです <Grid> <Image x:Name="img" Height="100" Width="100" Margin="100,30,0,0"/> </Grid> ここにC#コードがあります public partial class MainWindow : Window { string imgPath; Point start; bool dragStart = false; public MainWindow() { InitializeComponent(); imgPath = "C:\\Pictures\\flower.jpg"; ImageSource imageSource = new BitmapImage(new Uri(imgPath)); img.Source = imageSource; window.PreviewMouseMove += Window_PreviewMouseMove; window.PreviewMouseUp += Window_PreviewMouseUp; …
8 c#  wpf  drag-and-drop 

7
文字列xx:xx:xx形式からの正規表現抽出
私はプログラミングに非常に慣れていないので、質問があります。Regexメソッドを使用して文字列から時間、分、秒を抽出して配列に入れようとしていますが、これまでのところ、1つの数値しか使用できません。 int initialDay D = 0; string startDay = Console.ReadLine(); //input: "It started 5 days ago" var resultString = Regex.Match(startDay, @"\d+").Value; initialDay = Int32.Parse(resultString); // initialDay here equals 5. 文字列06:11:33から読み取り、これらの時間、分、秒を整数の配列に変換するにはどうすればよいですか?したがって、結果の配列は次のようになります。 int[] array = new int[] {n1, n2, n3}; // the n1 would be 6, n2 would be 11 and n3 …
8 c#  regex 

1
IntPtrをInt64に変換:conv.u8またはconv.i8?
私は、ILGeneratorを使用してILフラグメントを放出するのに役立つ拡張機能に取り組んでいExpressionます。整数変換の部分に取り掛かるまで、すべてが順調でした。私には本当に直感に反するものがあります。 conv.i8に変換するInt32ために使用UInt64 conv.u8に変換するUInt32ために使用Int64 これらはすべて、評価スタックが整数の符号を追跡しないためです。その理由は完全に理解しています。処理するのは少し難しいです。 今、私はを含む変換をサポートしたいと思いIntPtrます。長さが可変であるため、トリッキーになる必要があります。私はC#コンパイラーがそれをどのように実装するかを調べることにしました。 今特定に焦点を当てIntPtrにInt64変換。どうやら望ましい動作は次のとおりです。64ビットシステムでは何もしないか、32ビットシステムでは符号拡張します。 C#ではstruct native intによってラップされてIntPtrいるため、そのInt64 op_Explicit(IntPtr)メソッドの本体を確認する必要があります。以下は、.NETコア3.1.1のdnSpyによって逆アセンブルされます。 .method public hidebysig specialname static int64 op_Explicit ( native int 'value' ) cil managed { .custom instance void System.Runtime.CompilerServices.IntrinsicAttribute::.ctor() = ( 01 00 00 00 ) .custom instance void System.Runtime.Versioning.NonVersionableAttribute::.ctor() = ( 01 00 00 00 ) .maxstack 8 IL_0000: …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.