1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4// ============================================================
5//
6// AssemblyName.hpp
7//
8
9
10//
11// Defines the AssemblyName class
12//
13// ============================================================
14
15#ifndef __BINDER__ASSEMBLY_NAME_HPP__
16#define __BINDER__ASSEMBLY_NAME_HPP__
17
18#include "bindertypes.hpp"
19#include "assemblyidentity.hpp"
20
21namespace BINDER_SPACE
22{
23 class AssemblyName : protected AssemblyIdentity
24 {
25 public:
26 typedef enum
27 {
28 INCLUDE_DEFAULT = 0x00,
29 INCLUDE_VERSION = 0x01,
30 INCLUDE_ARCHITECTURE = 0x02,
31 INCLUDE_RETARGETABLE = 0x04,
32 INCLUDE_CONTENT_TYPE = 0x08,
33 INCLUDE_PUBLIC_KEY_TOKEN = 0x10,
34 EXCLUDE_CULTURE = 0x20
35 } INCLUDE_FLAGS;
36
37 AssemblyName();
38 ~AssemblyName();
39
40 HRESULT Init(/* in */ IMDInternalImport *pIMetaDataAssemblyImport,
41 /* in */ PEKIND PeKind,
42 /* in */ mdAssemblyRef mda = 0,
43 /* in */ BOOL fIsDefinition = TRUE);
44 HRESULT Init(/* in */ SString &assemblyDisplayName);
45 HRESULT Init(/* in */ IAssemblyName *pIAssemblyName);
46 HRESULT CreateFusionName(/* out */ IAssemblyName **ppIAssemblyName);
47
48 ULONG AddRef();
49 ULONG Release();
50
51 // Getters/Setters
52 inline SString &GetSimpleName();
53 inline void SetSimpleName(SString &simpleName);
54 inline AssemblyVersion *GetVersion();
55 inline void SetVersion(/* in */ AssemblyVersion *pAssemblyVersion);
56 inline SString &GetCulture();
57 inline void SetCulture(SString &culture);
58 inline SBuffer &GetPublicKeyTokenBLOB();
59 inline PEKIND GetArchitecture();
60 inline void SetArchitecture(PEKIND kArchitecture);
61 inline AssemblyContentType GetContentType();
62 inline void SetContentType(AssemblyContentType kContentType);
63 inline BOOL GetIsRetargetable();
64 inline void SetIsRetargetable(BOOL fIsRetargetable);
65 inline BOOL GetIsDefinition();
66 inline void SetIsDefinition(BOOL fIsDefinition);
67
68 inline void SetHave(DWORD dwIdentityFlags);
69
70 inline BOOL HaveAssemblyVersion();
71 inline BOOL HaveNeutralCulture();
72
73 SString &GetDeNormalizedCulture();
74 BOOL IsStronglyNamed();
75
76 BOOL IsMscorlib();
77
78 // Translate textual identity into appropriate PEKIND
79 HRESULT SetArchitecture(SString &architecture);
80
81 ULONG Hash(/* in */ DWORD dwIncludeFlags);
82 BOOL Equals(/* in */ AssemblyName *pAssemblyName,
83 /* in */ DWORD dwIncludeFlags);
84
85 // Compare assembly ref with assembly def ignoring assembly version
86 BOOL RefEqualsDef(/* in */ AssemblyName *pAssemblyNameDef,
87 /* in */ BOOL fInspectionOnly);
88
89 HRESULT Clone(/* out */ AssemblyName **ppAssemblyName);
90
91 void GetDisplayName(/* out */ PathString &displayName,
92 /* in */ DWORD dwIncludeFlags);
93
94 static SString &ArchitectureToString(PEKIND kArchitecture);
95 protected:
96 enum
97 {
98 NAME_FLAG_NONE = 0x00,
99 NAME_FLAG_RETARGETABLE = 0x01,
100 NAME_FLAG_DEFINITION = 0x02,
101 };
102
103 SString &GetNormalizedCulture();
104
105 LONG m_cRef;
106 DWORD m_dwNameFlags;
107 };
108
109#include "assemblyname.inl"
110};
111
112#endif
113