ブログアーカイブ

D8021, /Wextra


Cmakeを利用して生成したVisual Studioのソリューション(.sln)でビルドを行うと D8021:invalid numeric argument ‘/Wextra’ が発生してビルドできない

例えば次のように
set(CMAKE_CXX_FLAGS_DEBUG “${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wundef”)
となっている個所を
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS_DEBUG “${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wundef”)
endif(CMAKE_COMPILER_IS_GNUCXX)
のようにif-endifで囲むとVisual Studioで正しくビルドを行うことができるようになります。Wextra はgccで使用されます。

広告

プロセッサ アーキテクチャ


C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3270: 構築されているプロジェクトのプロセッサ アーキテクチャ “MSIL” と、参照 “.dll” のプロセッサ アーキテクチャ “x86” の間には不一致がありました。この不一致は、ランタイム エラーを発生させる可能性があります。プロジェクトと参照の間でプロセッサ アーキテクチャが一致するように、構成マネージャーを使用してターゲットとするプロジェクトのプロセッサ アーキテクチャを変更するか、ターゲットとするプロジェクトのプロセッサ アーキテクチャに一致するプロジェクト アーキテクチャとの依存関係を参照で設定することを検討してください。

C# Windows フォーム アプリケーション プロジェクト の プロパティー、「ビルド」 タブ – 「プラットフォームターゲット」を Any CPU から x86 または x64 に変更すると発生しなくなります。

アプリケーションの多言語対応


Visual Studioを使用したアプリケーションの多言語の方法です。


Windows フォーム

  1. Windows フォームアプリケーション プロジェクトを作成します。
  2. フォームにコントロールを配置します。
  3. ソリューションエクスプローラーでプロジェクトを選択して右クリック、プロパティーを選択します。
  4. アプリケーションのアセンブリ情報をクリックして、ニュートラル言語を(なし)から変更します。
  5. Windows フォームのLocalizableをTureに設定して、Languageプロパティーを変更します。それぞれ対応する言語に合わせてラベル、ボタンなどのテキストを変更します。
Multilingual app toolkitを使用する場合
  1. メニューの 「ツール」-「多言語アプリツールキット」-「選択範囲を有効にする」を選択します。
  2. ソリューションエクスプローラーでプロジェクトを選択して右クリック、「多言語アプリツールキット」-「翻訳言語の追加」を選択します。疑似言語[qus-ploc]と追加する言語を選択します。
  3. MultilingualResourecesフォルダーのxlfファイルを選択して Multilingual Editor を起動します。候補表示をクリックして翻訳します。[qus-ploc]は必ず翻訳してください。

WPF アプリケーション

  1. WPF アプリケーション プロジェクトを作成します。
  2. MainWindows.xamlなどのファイルにコントロールを配置します。この例ではTextBlockコントロールを追加します。
  3. ソリューションエクスプローラーでプロジェクトを選択して右クリック、プロパティーを選択します。
  4. アプリケーションのアセンブリ情報をクリックして、ニュートラル言語を(なし)から変更します。
  5. Resources.resxファイルを開きます。アクセス修飾子をPublicに設定します。名前と値を入力して文字列を追加します。ここではTranslateTestとします。
  6. MainWindows.xamlファイルを開きます。Window要素にxmlns:Properties=”clr-namespace:(プロジェクトの名前).Properties” 属性を追加します。
  7. TextBlockコントロールの要素にText=”{x:Static Properties:Resources.TranslateTest} 属性を追加します。
    1. MainWindows.xaml.csファイルを開きます。[C#]
      private CultureInfo cultureOverride = new CultureInfo("qps-PLOC");

      を追加します。またコンストラクターのInitializeComponent();の後に

      
      if (Debugger.IsAttached == true && cultureOverride != null)
      {
      	Thread.CurrentThread.CurrentUICulture = cultureOverride;
      	Thread.CurrentThread.CurrentCulture = cultureOverride;
      }
      

      を追加します。Using the Multilingual App Toolkit with WPF Applications | Synergist:を参考にしました。

  8. Multilingual app toolkitを使用しない場合は、Resources.[lang].resxファイルを追加します。英語(米国)の場合はResouces.en-US.resxファイルを追加します。それぞれ値を翻訳します。
Multilingual app toolkitを使用する場合
  1. メニューの 「ツール」-「多言語アプリツールキット」-「選択範囲を有効にする」を選択します。
  2. ソリューションエクスプローラーでプロジェクトを選択して右クリック、「多言語アプリツールキット」-「翻訳言語の追加」を選択します。疑似言語[qus-ploc]と追加する言語を選択します。
  3. MultilingualResourecesフォルダーのxlfファイルを選択して Multilingual Editor を起動します。候補表示をクリックして翻訳します。[qus-ploc]は必ず翻訳してください。

ユニバーサル Windows プラットフォーム  アプリ(UWP)

  1. 空白のアプリ(ユニバーサル Windows)を選択して ユニバーサル Windows プラットフォーム用のアプリ プロジェクトを作成します。
  2. MainPage.xamlなどのファイルにコントロールを配置します。この例ではTextBlockコントロールを追加します。
  3. Package.appxmanifestファイルを開きます。既定の言語を設定します。
  4. ソリューションエクスプローラーでプロジェクトを選択して右クリック、Stringsフォルダーを作成します。さらにそのフォルダーにResources.reswファイルを追加します。
  5. Resources.reswファイルを開きます。アクセス修飾子をPublicに設定します。名前と値を入力して文字列を追加します。ここではTranslateTestとします。
  6. MainPage.xamlファイルを開きます。TextBlock要素にx:Uid=”TranslateTest”を追加します。
  7. Multilingual app toolkitを使用しない場合は、Stringsフォルダーに[lang]サブフォルダーを作成してResources.reswファイルを追加します。英語(米国)の場合は\en-US\Resouces.reswファイルを追加します。それぞれ値を翻訳します。
Multilingual app toolkitを使用する場合

Windows 10に対応したUWPを翻訳するには、Multilingual app toolkit 4.0が必要です。Multilingual app toolkit 3.0はWindows 8.1のUWPのみ対応しています。

  1. メニューの 「ツール」-「多言語アプリツールキット」-「選択範囲を有効にする」を選択します。
  2. ソリューションエクスプローラーでプロジェクトを選択して右クリック、「多言語アプリツールキット」-「翻訳言語の追加」を選択します。疑似言語[qus-ploc]と追加する言語を選択します。
  3. MultilingualResourecesフォルダーのxlfファイルを選択して Multilingual Editor を起動します。候補表示をクリックして翻訳します。[qus-ploc]は必ず翻訳してください。

Visual Studio のエラー


%SystemRoot%\assembly\GAC_MSIL, %SystemRoot%\Microsoft.NET\assembly\GAC_MSIL フォルダーのファイルが破損したために Visual Studio でエラーが発生する場合があります。GAC_32, GAC_64 フォルダーと、 %SystemRoot%\assembly\NativeImages_v2.0.50727_32, NativeImages_v2.0.50727_64, NativeImages_v4.0.30319_32, NativeImages_v4.0.30319_64 フォルダーのファイルも確認してください。

エクスプローラーで直接 %SystemRoot%\assembly\GAC_MSIL にアクセスするには attrib %SystemRoot%\assembly -R -S を実行する必要があります。元に戻すには attrib %SystemRoot%\assembly +R +S を実行します。

Visual Studio, Desinger


Windows 8.1, Visual Studio Express 2013 for Windows の XAML 画面で次のようなエラーメッセージが発生するようになりました。

System.OperationCanceledException
デザイナーで必要なアプリケーション パッケージの登録は、時間がかかりすぎて完了できず、取り消されました。デザイナーを再度読み込んでやり直してください。
場所 Microsoft.Expression.HostUtility.Platform.AppContainerProcessDomainFactory.CreateDesignerProcess(String applicationPath, String clientPort, Uri hostUri, IDictionary environmentVariables, Int32& processId, Object& processData)
場所 Microsoft.Expression.DesignHost.Isolation.Primitives.ProcessDomainFactory.ProcessIsolationDomain..ctor(ProcessDomainFactory factory, IIsolationBoundary boundary, AppDomainSetup appDomainInfo, FrameworkName targetFramework, String identifier, String baseDirectory)
場所 Microsoft.Expression.DesignHost.Isolation.Primitives.ProcessDomainFactory.CreateIsolationDomain(IIsolationBoundary boundary)
場所 Microsoft.Expression.HostUtility.Platform.AppContainerProcessDomainFactory.CreateIsolationDomain(IIsolationBoundary boundary)
場所 Microsoft.Expression.DesignHost.Isolation.Primitives.IsolationBoundary.Initialize()
場所 Microsoft.Expression.DesignHost.Isolation.Primitives.IsolationBoundary.CreateInstance[T](Type type)
場所 Microsoft.Expression.DesignHost.Isolation.IsolatedObjectFactory.Initialize()
場所 Microsoft.VisualStudio.ExpressionHost.Services.VSIsolationService.CreateObjectFactory(IIsolationTarget isolationTarget, IObjectCatalog catalog)
場所 Microsoft.Expression.DesignHost.Isolation.IsolationService.CreateLease(IIsolationTarget isolationTarget)
場所 Microsoft.Expression.DesignHost.IsolatedDesignerService.CreateLease(IIsolationTarget isolationTarget, CancellationToken cancelToken, DesignerServiceEntry& entry)
場所 Microsoft.Expression.DesignHost.IsolatedDesignerService.IsolatedDesignerView.CreateDesignerViewInfo(CancellationToken cancelToken)
場所 Microsoft.Expression.DesignHost.Isolation.IsolatedTaskScheduler.InvokeWithCulture[T](CultureInfo culture, Func`2 func, CancellationToken cancelToken)
場所 Microsoft.Expression.DesignHost.Isolation.IsolatedTaskScheduler.c__DisplayClassa`1.b__6()
場所 System.Threading.Tasks.Task`1.InnerInvoke()
場所 System.Threading.Tasks.Task.Execute()

Program Files フォルダーにある Microsoft Visual Studio 12.0 のアクセス権を親フォルダーから継承させるように修正したところこのエラーは発生しなくなりました。何らかの原因でアクセス権が置き換わってしまったようです。