Question: In one of my apps I must distinguish my own included addins from others' addins.  

They are signed with different keys each and so is the host app. 

Is there any way to distinguish my assemblies from others' assemblies? (Possibly with the help of the signing key)

Answer: 
You can accomplish this by checking the strong name signature. See [Checking For A Valid Strong Name Signature](http://bit.ly/uDTfKS) for how to this. Note that the article refers to using P/invoke with StrongNameSignatureVerificationEx, but if you are using .NET 4.0 or above you should substitute [ICLRStrongName::StrongNameSignatureVerificationEx](http://bit.ly/rw3UC9). 

See [Public Keys and Public Key Tokens](http://bit.ly/rSCump) for what a public key token actually is. Given that it is only a hash of the public key, and therefore easily duplicated or extracted and then injected into an untrusted assembly, it isn't a secure mechanism for validating an assembly.
A little nice snippet:

```
// Assembly is a System.Reflection.Assembly
public string GetAssemblyGUID(Assembly assembly)
{
    object[] objects = assembly.GetCustomAttributes(typeof(System.Runtime.InteropServices.GuidAttribute), false);
    if (objects.Length > 0)
        return ((System.Runtime.InteropServices.GuidAttribute)objects[0]).Value;
    else
        return null;
}

```

This will retrieve the GUID of the specified assembly. You can set your assembly's GUID in Project Properties. This holds true for class libraries and PEs.