C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

【WPF】xamlで参照先のdllを切り分けしたい

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■92033 / inTopicNo.1)  【WPF】xamlで参照先のdllを切り分けしたい
  
□投稿者/ tro (8回)-(2019/08/19(Mon) 09:19:16)

分類:[.NET 全般] 

xaml上で外部dllを参照する際、
Debug/Releaseによって切り替えを行うにはどうしたらよいでしょうか。
前提条件として外部dllのソースコードを変更することはできません。

ちなみに参照設定についてはプロジェクトファイルにて対応済みです。

【サンプルコード】
<UserControl x:Class="Test.ClassA"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Test"
xmlns:myLib="clr-namespace:TestLib;assembly=MyLibrary" ←ここをReleaseでは「MyLibrary」、Debugでは「MyLibraryD」にしたい
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="600">

<Grid>
<myLib:TestControl>
</Grid>
</UserControl>

引用返信 編集キー/
■92038 / inTopicNo.2)  Re[1]: 【WPF】xamlで参照先のdllを切り分けしたい
□投稿者/ Hongliang (868回)-(2019/08/19(Mon) 20:17:23)
// だれかご存じの方いるかなあと思って見ていたけどレスがつかないようなので…。

少し頭をひねってみましたが、解決策は思いつきませんでした。
Visual Studioのアドオンを作ればどうにかなるかもしれませんが、これは私にはよくわからない世界です。

一般的な解決策としてはXmlnsDefinition属性をつけることなんですが、その型を定義しているアセンブリじゃないとダメなんですよね…。
// XmlnsDefinition属性にはAssemblyNameプロパティがあるけど、Visual Studioやmsbuildには残念ながら無視される。
引用返信 編集キー/
■92039 / inTopicNo.3)  Re[2]: 【WPF】xamlで参照先のdllを切り分けしたい
□投稿者/ tro (9回)-(2019/08/20(Tue) 08:48:34)
ご回答ありがとうございます。
コードビハインドで#if Debugしてでも切り分けができるといいのですが・・・。
引用返信 編集キー/
■92041 / inTopicNo.4)  Re[1]: 【WPF】xamlで参照先のdllを切り分けしたい
□投稿者/ YuO (1回)-(2019/08/20(Tue) 11:14:52)
No92033 (tro さん) に返信
> xaml上で外部dllを参照する際、
> Debug/Releaseによって切り替えを行うにはどうしたらよいでしょうか。
> 前提条件として外部dllのソースコードを変更することはできません。

型フォワード用のクラスライブラリを作って、そこで必要なクラスを型フォワードしてしまってはどうでしょうか。
クラス数が多くなると大変になりますが……。

・フォワードするクラスライブラリはMyLibraryとMyLibraryDを参照設定し、エイリアスを設定する。
  ここでは、MyLibraryにrelease、MyLibraryDにdebugというエイリアスを設定したと仮定。
・フォワードするクラスライブラリには、以下のコードを含める。

extern alias debug;
extern alias release;

using System.Runtime.CompilerServices;

#if DEBUG
[assembly: TypeForwardedTo(typeof(debug::TestLib.TestControl))]
#else
[assembly: TypeForwardedTo(typeof(release::TestLib.TestControl))]
#endif

・利用するxaml中の、clr-namespceのassemblyをフォワードするクラスライブラリの名前に変更する。

VS2019 Community 16.2.2 +.NET Framework 4.8の環境では、VSのプレビュー表示も有効でした。

引用返信 編集キー/
■92057 / inTopicNo.5)  Re[2]: 【WPF】xamlで参照先のdllを切り分けしたい
□投稿者/ tro (10回)-(2019/08/21(Wed) 17:53:40)
ありがとうございます。
試してみます。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ