アセンブリ名から厳密な名前を削除する方法を探していました。 シリアライズに使用しましたが、他のものにも使用できると仮定しています。正規表現を使用してシリアライズしている間にアセンブリから厳密な名前を削除します
private Regex _assemRegex = new Regex("(?<assembly>^.*?),.*");
Regex reg = new Regex("(?<type>.*?), PublicKeyToken(=.*?)](?<end>.*)");
//assume that all replacement types are in the same assembly with TypeReplacer
static readonly string assembly2Use = System.Reflection.Assembly.GetExecutingAssembly().FullName;
public override Type BindToType(string assemblyName, string typeName)
{
// remove strong name from assembly
Match match = _assemRegex.Match(assemblyName);
if (match.Success)
{
assemblyName = match.Groups["assembly"].Value;
}
// remove strong name from any generic collections as many time as needed
match = reg.Match(typeName);
string typeWithoutSN = typeName;
while (match.Success)
{
typeWithoutSN = string.Format("{0}]{1}",
match.Groups["type"].Value,
match.Groups["end"].Value);
match = reg.Match(typeWithoutSN);
}
// replace assembly name with the simple assembly
// name - strip the strong name
string type = string.Format("{0}, {1}", typeWithoutSN,
assemblyName);
// The following line of code returns the type.
return Type.GetType(type);
}
おかげで、多分あなたはこの質問への答えとして、コードを置くことができ、後でそれを受け入れる(時間制限あり)そうすれば人々はこのポストに答えるつもりはない。 – gideon
良いコメントgideon、後でやります(現時点ではできません) –