2016-03-30 18 views
1

私はこのような文字列がありますので完全なアセンブリ文字列からアセンブリ名を取得する方法を教えてください。

"MyProduct.Framework.Business.ShopBusiness, MyProduct.Framework.Business" 

私は:

"MyProduct.Framework.Business.ShopBusiness" 

しかし、アセンブリ名、それが自己のみである:

"MyProduct.Framework.Business" 

私はこのような文字列を作成する必要がありますが https://stackoverflow.com/a/3512351/375422

:この問題を解決しようとしています

だから基本的に私はこれがあります。

Type executingClass = Type.GetType(TestContext.FullyQualifiedTestClassName); 

をそして、私はこのような何かが必要です。

Type executingClass = Type.GetType(TestContext.FullyQualifiedTestClassName + ", " + Assembly.FromString(TestContext.FullyQualifiedTestClassName)); 

を私は上記の「Assembly.FromStringを()」を発明として任意の組み込みの方法はありますか?言い換えれば

:どのように私はTestContextから実行するテストのアセンブリ名を得ることができますか?

+0

私はこれだけを持っている:TestContext.FullyQualifiedTestClassName – Seva

+4

これは、[XY問題](http://xyproblem.info/)のように聞こえます。あなたの実際の目標は何ですか? –

+0

私の目標は、クラスなしでアセンブリ名を抽出することです。だからこの文字列から: "MyProduct.Framework.Business.ShopBusiness"、私はしたい: "MyProduct.Framework.Business"。組み込みメソッドはありますか? – Seva

答えて

1

は、クラスの名前空間とアセンブリ名の間には直接のリンクはありません。したがって、一般的に、クラス名からのみ完全修飾名を取得することはできません。

0

は、最後の位置を検索し、 ""その位置にサブストリングを挿入します。

var fullTypeName = "MyProduct.Framework.Business.ShopBusiness"; 
var typeIndex = assemblyTypeName.LastIndexOf("."); 
var namespace = assemblyTypeName.Substring(0, assemblyIndex); 

その後、あなたの名前空間を追加します。

var assemblyQualifiedTypeName = fullTypeName + ", " + namespace 
+0

助けてくれてありがとうが、その問題は、 "ビジネス"が単なるフォルダであれば、それを持つことができないということです。私は、文字列の最後の部分だけがアセンブリ名であると仮定することはできません。 – Seva

+1

アセンブリ名を確実に推測する方法はありません。アセンブリを使ってみることもできます。GetReferencedAssembliesを使用して、試行錯誤を使って正しいものを見つけてください。でもそれはちょっと狂っているようです。同じ名前の複数の型があるかもしれません –

関連する問題