問題タブ [multitargeting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
538 参照

wpf - マウスとタッチ指向の両方のWPFアプリケーションを作成するためのベストプラクティス

マウス入力とタッチ入力の両方をサポートするWPFアプリケーションを開発する必要があります。単一のコードベースを維持し、それを実装するための苦痛を最小限に抑えることを可能にするアプローチを探しています。一部のフレームワークまたはビルド構成は、単一のプロジェクトでWPFプラットフォームとSilverlightプラットフォームの両方をマルチターゲットにするために使用されるProjectLinker+プリプロセッサディレクティブシナリオのようなものです。前もって感謝します。
サンプルシナリオの編集 :アプリケーションには、ユーザーが複数の写真をサーバーにアップロードできるようにするコントロールがあります。ファイル選択ボックスは、マウスでのドラッグアンドドロップをサポートします。また、新しいファイルを追加するためのジェスチャもサポートする必要があります。

0 投票する
1 に答える
500 参照

c# - Visual Studio2012.NETマルチターゲティングおよび非同期コールバック

C#で記述された.NETFramework3.5を使用した.NETアプリケーションがあります。アプリケーションは、BeginInvokeを使用して非同期的にデリゲートを呼び出しています。アプリケーションは、Visual Studio 2012 RCを使用してコンパイルすると正常に動作しますが、Visual Studio 2010 SP1を使用してコンパイルするとフリーズします(メインスレッドは、非同期デリゲートが完了するのを待ってWaitOneでスタックしますが、実行されません)。

バグが誤って設計された同期にある可能性はありますが、私が驚いたのは、両方で同じフレームワークバージョンをターゲットにしているのに、VS 2012で機能し、VS2010では機能しない理由です。

Visual Studio for .NETでマルチターゲティングはどのように実装されますか?同じフレームワークバージョンを対象とする場合、実行可能ファイルの動作が同じであると期待する必要がありますか、それとも、使用するVisual Studioのバージョンに依存する部分(コンパイラフロントエンドまたはランタイムライブラリの一部)がありますか?

0 投票する
2 に答える
1023 参照

visual-studio - フレームワーク4.0を対象とするプロジェクトをデバッグするときに、フレームワーク4.5アセンブリがロードされます。

VisualStudio2012を使用して.NETFramework4.0をターゲットにし、4.0環境(Windows Server 2003)に展開したときにコードが正しく機能することを確認する必要があります。

Visual Studio 2012のマルチターゲティングは正しく機能しているようですが、mscorlib.dll。他のフレームワークDLLを参照する場合、コンパイルの場合、たとえば4.0には存在しないタイプを参照するなどの適切なエラーが発生しますが、実行およびデバッグ中に4.5バージョンのDLLがロードされます。

これにより、4.5バージョンのフレームワークが行ったインプレースアップグレードの重大な変更を考慮して、コードが本番環境で正しく機能することを確認できなくなります。

MSDNにある4.0と4.5の違いのいくつかを実行することにより、マルチターゲティング機能をテストするためにいくつかの単体テストを行いました。テストは、テストしているフレームワークのバージョンを対象とした独自のプロジェクトに含まれています。すべてのテストに合格する必要があります。

MSCORLIBに対するテスト

List<string>これらのテストは、次の場所にあるように正常に合格しmscorlib.dllます。

フレームワーク4.0:-パス-

フレームワーク4.5:-パス-

他のフレームワークDLLに対してテストします

ただし、これらのタイプはで検出され、4.5バージョンが常にロードされるため、これらのテストは正しく機能しません(4.5のものは合格し、4.0のものは合格しません)System.ComponentModel.Composition.dll

フレームワーク4.0-失敗し、4.5で予期される例外をスローします-

フレームワーク4.5-パス-

これは設計どおりですか?4.0バージョンのmscorlibがロードされているが、他のすべてのアセンブリの4.5バージョンがロードされていることを考えると、互いに素であるように見えます。

希望する機能を取得する方法はありますか?

アップデート

これが私が使用しているソリューション/プロジェクトです。

0 投票する
2 に答える
667 参照

visual-studio-2010 - VS2010ネイティブマルチターゲティング

Win7開発マシンにVS2005、VS2008、およびVS2010をインストールしています。EXEプロジェクトがVS2010によってビルドされたときにLoadLibrary()呼び出し中に例外を取得するサードパーティのDLLを使用する特定のプロジェクトがあります(v100またはv90ツールセットのいずれかを対象としている場合)。VS2005またはVS2008によって直接ビルドされた場合は完全に機能します。 。

Li Shao(Microsoftの)2009年のブログエントリによると:

http://blogs.msdn.com/b/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx

VS2010プロジェクトを開き、プラットフォームツールセットをv100からv90に変更できるはずです。そうすると、VS2010は実際にVS2008コンパイラ、ヘッダー、およびライブラリを使用してプログラムをビルドします。そうである場合、プロジェクトがこのようにビルドされたときにDLLがロードされないため、「正しく」実行されていません。ビルドログを調べて、使用されているコンパイラを確認しようとしましたが、ログにパスやバージョン番号がないため、問題が発生しました。

これは、Win32Apisに直接書き込まれたプレーンなC(C ++、MFC、.NETではない)プロジェクトです。これを機能させる方法はありますか、それとも単一のプロジェクト(システム全体を構成する100以上のうち)に別のコンパイラを使用しているだけですか?

ヘルプ!

0 投票する
1 に答える
572 参照

c# - 単一のバイナリで複数の .NET フレームワークをターゲットにしていますか?

背景:

インストールされている .NET Framework が 2.0 から 4.5 までのクライアントで実行する必要があるアプリケーションがあります。このアプリケーションは、多数のファイル (場合によっては 200k を超える個別のファイル) を列挙して操作を実行できる必要があります。

ファイルのインデックスを構築するために、アプリケーションは現在System.IO.DirectoryInfo.GetFiles()を使用しています。これは、処理コンポーネントが作業を開始する前にパス ツリー全体のインデックスが作成されるまで待機する必要があるため、パフォーマンス ヒットになります。一部の古風なテープ マルチローダーと一部の不適切に作成されたファームウェアが原因で、一部のディレクトリをトラバースすると、テープからの読み取りがトリガーされる可能性があります。処理時間が数十秒から数十分に跳ね上がります。

.NET 4.0 は、この問題を軽減するSystem.IO.Directory.EnumerateFiles(Path)メソッドを提供します。ただし、4.0+ にアップグレードされた datter コンソールはごくわずかであり、近代化を求める私たちの嘆願は敵意に満ちています。

質問:

単一のバイナリでGetFiles と EnumerateFiles の両方のメソッドを実装することは可能ですか? 事実上、これは .NET 2.0 を対象とする単一のバイナリであり、実行時に 4.0 フレームワークが使用可能であると判断された場合に .NET 4.0 メソッドを呼び出すことができます。

言及する前に: データを変更することは、クライアントにとってオプションではありません。私はもう試した。私は今まで試したことがありますか。

0 投票する
4 に答える
660 参照

c# - .NETでのマルチターゲティング

さまざまなブログを読んで、「マルチターゲティング」またはサイドバイサイド実行の用語についてかなり混乱しています。

  1. 一部のブログでは、並列実行とは、プロセス内の2つのバージョンのCLRを意味すると述べています。他の何人かは、.net2.0と.net3.0のアセンブリが並行して実行されていると主張しています。誰が正しいのか、誰が間違っているのかわからないことに非常に失望しています。

  2. また、Scott Hanselmanのブログなど(多くの混乱を招きます)のような多くのブログで、ターゲットフレームワークが4.0の場合、.NET4.5のどの機能も機能しないことを確認しました。私はそれに同意することができます。しかし、4.5でバグが修正された4.0の機能が、4.5を使用してビルドし、4.0でデプロイすると非表示になるという事実に同意したり、理解したりすることはできません。ここで私は「隠された」という用語を理解しておらず、実際にそれが何を意味するのかを誰もあえて説明しません。ランタイムエラーを意味しますか?コンパイル時エラーを意味しますか?これはできません。それは一貫性のない行動を意味しますか?例外 ?そうだとすれば、なぜMSがVSでの開発にこの種の柔軟性を持たせたのだろうか。それは何か目的を果たしますか?私は、最初のケースは意味があることを理解していますが、2番目のケースを理解したり同意したりしないでください。

  3. Rick / Scott Hanselmanの投稿でも、大きな変更とは、CLRを含む完全なアップグレードを意味することを確認しました。次に、3.0をメジャーアップグレードと見なす必要がありますが、まだ.NET2.0CLRを使用しているためそうではありません。では、なぜ命名用語が3.0.xx / 3.5.xxなのですか?.NET 4.0.30319.xの場合のように、CLRも新しいので、私はこれに同意します。誰が正しいのか驚いています。これらの人々またはMSDNは、どちらも原則と矛盾しています(MSDNがMajor.Minor.Build.Revisionとしてフォーマットを言うように、Hanselmanまたは他の人が言うように、MajorはCLRアップグレードを意味し、.NET 3.0にはありません)

参照:http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

http://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx

上記の2つの質問について何か考えはありますか?

0 投票する
2 に答える
3836 参照

msbuild - MSBuild を使用して TeamCity で複数のフレームワークをターゲットとする NuGet パッケージを構成するための推奨されるアプローチはありますか?

私はいくつかの投稿を読みましたが (以下の参照を参照)、私の技術スタックに固有のベスト プラクティスに関するガイドをまだ見つけていません。

目標: MSBuild と NuGet を使用して、TeamCity を介して単一の .csproj ファイルから構築された複数の .NET フレームワークをターゲットとする単一の NuGet パッケージを作成します。

制約:

  1. コードを VCS から 1 回だけ引き出します。
  2. コンパイルされたすべてのアセンブリは、同じバージョンにする必要があります。
  3. 単一の .csproj (ターゲット フレームワークごとに 1 つではありません)。

私は2つのアプローチを念頭に置いています:

  1. 単一のビルド構成を作成します。これには、.NET 3.5 のコンパイル、.NET 4.0 のコンパイル、NuGet によるパックの 3 つのビルド ステップが含まれます。各ビルドステップは、最後の成功に左右されます。このアプローチで私が目にする唯一の実際の問題 (そして、私が気付いていない解決策があることを願っています) は、各ビルド ステップで独自のビルド パラメーター セット (たとえば、system.TargetFrameworkVersion と system.OutputPath) を指定する必要があることです。 NuGet パック ステップが .nuspec ファイルの Files セクションに基づいて実行できるように、DLL を配置する一意の場所 (例: bin\release\v3.5 および bin\release\v4.0)。

  2. 複数のビルド構成を作成します。上記のビルド手順ごとに 1 つのビルド構成。このアプローチでは、TargetFrameworkVersion と OutputPath ビルド パラメーターの問題を簡単に解決できますが、スナップショットの依存関係を作成し、ビルド間でアセンブリのバージョン番号を共有する必要があります。また、Enterprise ライセンスを持っているため、ビルド構成スロットを消費しますが、これは問題ありません (最適ではありません)。

オプション #1 は当然の選択のように思えます。オプション#2は汚いと感じます。

だから私の2つの質問は次のとおりです。

  1. ビルド ステップに固有のパラメーターを作成することはできますか?
  2. 3番目のより良いアプローチはありますか?

参考文献:

  1. 内部依存関係管理用のシンボルを使用したマルチフレームワーク NuGet ビルド
  2. Nuget - 複数のプロジェクトでソリューションをパックする (複数のフレームワークを対象とする)
  3. http://lostechies.com/joshuaflanagan/2011/06/23/tips-for-building-nuget-packages/
  4. http://msdn.microsoft.com/en-us/library/hh264223.aspx
  5. https://stackoverflow.com/a/1083362/607701
  6. http://confluence.jetbrains.com/display/TCD7/Configuring+Build+Parameters
  7. http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package
0 投票する
1 に答える
234 参照

windows-phone-7 - ソリューションのセットアップ マルチ ターゲット Windows Phone アプリ

WP 7.5/7.8 と WP 8 の両方と互換性のある Windows Phone アプリを作成する必要があります。

両方のプラットフォームを対象とするようにソリューションをセットアップするにはどうすればよいですか?

データにアクセスするためのクラス ライブラリを既に作成しています。

編集

WP7.X と互換性のあるアプリのバージョンと、WP8 のみと互換性があるが、ストアに 1 つのアプリしかない別のバージョンを含む Windows Phone プロジェクトを作成するにはどうすればよいですか?

0 投票する
1 に答える
96 参照

nuget - 同じライブラリで複数のバージョンの .net をサポートする最善の方法

次の目的で、Visual Studio 2015 で .net ライブラリを作成しています。

  1. .net 2、3.5、4、および 4.5+ のサポート
  2. PCL サポート (.net 4.5+)
  3. Json.net 以外の追加の依存関係はありません

理想的には、ライブラリの .net 4.5 以降のバージョンは async を利用し、Task などを返すメソッドを含めます。

特に Visual Studio 2015/project.json リリースでは、私がやりたいことをサポートするさまざまな方法があるようですが、今日ゼロから始める良いアプローチは何ですか?

私のライブラリは比較的単純なので、コードを再利用したいのですが、.net 4.5 バージョンを危険にさらしたくありません。

賢明なプロジェクト構造とは、つまり、最新の .net フレームワークを利用しながら、古いフレームワークのサポートを組み込むことができるということです。