当前位置: 首页>>代码示例>>C#>>正文


C# AssemblyName.SetPublicKey方法代码示例

本文整理汇总了C#中AssemblyName.SetPublicKey方法的典型用法代码示例。如果您正苦于以下问题:C# AssemblyName.SetPublicKey方法的具体用法?C# AssemblyName.SetPublicKey怎么用?C# AssemblyName.SetPublicKey使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AssemblyName的用法示例。


在下文中一共展示了AssemblyName.SetPublicKey方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: GetNameImpl

		private AssemblyName GetNameImpl(ref AssemblyTable.Record rec)
		{
			AssemblyName name = new AssemblyName();
			name.Name = manifestModule.GetString(rec.Name);
			name.Version = new Version(rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber);
			if (rec.PublicKey != 0)
			{
				name.SetPublicKey(manifestModule.GetBlobCopy(rec.PublicKey));
			}
			else
			{
				name.SetPublicKey(Empty<byte>.Array);
			}
			if (rec.Culture != 0)
			{
				name.Culture = manifestModule.GetString(rec.Culture);
			}
			else
			{
				name.Culture = "";
			}
			name.HashAlgorithm = (AssemblyHashAlgorithm)rec.HashAlgId;
			name.CodeBase = this.CodeBase;
			name.RawFlags = (AssemblyNameFlags)rec.Flags;
			return name;
		}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:26,代码来源:AssemblyReader.cs

示例2: GetNameImpl

		private AssemblyName GetNameImpl(ref AssemblyTable.Record rec)
		{
			AssemblyName name = new AssemblyName();
			name.Name = manifestModule.GetString(rec.Name);
			name.Version = new Version(rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber);
			if (rec.PublicKey != 0)
			{
				name.SetPublicKey(manifestModule.GetBlobCopy(rec.PublicKey));
			}
			else
			{
				name.SetPublicKey(Empty<byte>.Array);
			}
			if (rec.Culture != 0)
			{
				name.Culture = manifestModule.GetString(rec.Culture);
			}
			else
			{
				name.Culture = "";
			}
			name.HashAlgorithm = (AssemblyHashAlgorithm)rec.HashAlgId;
			name.CodeBase = this.CodeBase;
			PortableExecutableKinds peKind;
			ImageFileMachine machine;
			manifestModule.GetPEKind(out peKind, out machine);
			switch (machine)
			{
				case ImageFileMachine.I386:
					// FXBUG we copy the .NET bug that Preferred32Bit implies x86
					if ((peKind & (PortableExecutableKinds.Required32Bit | PortableExecutableKinds.Preferred32Bit)) != 0)
					{
						name.ProcessorArchitecture = ProcessorArchitecture.X86;
					}
					else if ((rec.Flags & 0x70) == 0x70)
					{
						// it's a reference assembly
						name.ProcessorArchitecture = ProcessorArchitecture.None;
					}
					else
					{
						name.ProcessorArchitecture = ProcessorArchitecture.MSIL;
					}
					break;
				case ImageFileMachine.IA64:
					name.ProcessorArchitecture = ProcessorArchitecture.IA64;
					break;
				case ImageFileMachine.AMD64:
					name.ProcessorArchitecture = ProcessorArchitecture.Amd64;
					break;
				case ImageFileMachine.ARM:
					name.ProcessorArchitecture = ProcessorArchitecture.Arm;
					break;
			}
			name.RawFlags = (AssemblyNameFlags)rec.Flags;
			return name;
		}
开发者ID:JokerMisfits,项目名称:linux-packaging-mono,代码行数:57,代码来源:AssemblyReader.cs

示例3: Main

	static void Main(string[] args)
	{
		Universe universe = new Universe();
		AssemblyName name = new AssemblyName("System.Core");
		name.Version = new Version(3, 5);
		name.SetPublicKey(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
		AssemblyBuilder ab = universe.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save);
		ModuleBuilder modb = ab.DefineDynamicModule("System.Core", "System.Core.dll");
		TypeBuilder tb = modb.DefineType("System.Runtime.CompilerServices.ExtensionAttribute", TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.Sealed, universe.Import(typeof(Attribute)));
		tb.DefineDefaultConstructor(MethodAttributes.Public);
		tb.CreateType();
		ab.Save("System.Core.dll");
	}
开发者ID:JokerMisfits,项目名称:linux-packaging-mono,代码行数:13,代码来源:GenerateSystemCore.cs

示例4: GetNameImpl

		private AssemblyName GetNameImpl(ref AssemblyTable.Record rec)
		{
			AssemblyName name = new AssemblyName();
			name.Name = manifestModule.GetString(rec.Name);
			name.Version = new Version(rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber);
			if (rec.PublicKey != 0)
			{
				name.SetPublicKey(manifestModule.GetBlobCopy(rec.PublicKey));
			}
			else
			{
				name.SetPublicKey(Empty<byte>.Array);
			}
			if (rec.Culture != 0)
			{
				name.CultureInfo = new System.Globalization.CultureInfo(manifestModule.GetString(rec.Culture));
			}
			else
			{
				name.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
			}
			switch (rec.HashAlgId)
			{
				case 0:
					name.HashAlgorithm = AssemblyHashAlgorithm.None;
					break;
				case 0x8003:
					name.HashAlgorithm = AssemblyHashAlgorithm.MD5;
					break;
				case 0x8004:
					name.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
					break;
				default:
					throw new BadImageFormatException();
			}
			name.CodeBase = this.CodeBase;
			name.Flags = (AssemblyNameFlags)rec.Flags;
			return name;
		}
开发者ID:ikvm,项目名称:IKVM.NET-cvs-clone,代码行数:39,代码来源:AssemblyReader.cs

示例5: PosTest2

    public bool PosTest2()
    {
        TestLibrary.TestFramework.BeginScenario("PosTest2: set a 0 length key then get and verify");
        bool retVal = true;
        try
        {
            byte[] key = new byte[0];

            AssemblyName an = new AssemblyName();
            an.SetPublicKey(key);

            if (an.GetPublicKey() != key)
            {
                TestLibrary.TestFramework.LogError("002.1", "expect AssemblyName.GetPublicKey() equals what it's been set");
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestLibrary.TestFramework.LogError("002.2", "Unexpected exception: " + e);
            retVal = false;
        }
        return retVal;
    }
开发者ID:l1183479157,项目名称:coreclr,代码行数:24,代码来源:assemblynamesetpublickey.cs

示例6: __GetReferencedAssemblies

 public override AssemblyName[] __GetReferencedAssemblies()
 {
     List<AssemblyName> list = new List<AssemblyName>();
     for (int i = 0; i < AssemblyRef.records.Length; i++)
     {
         AssemblyName name = new AssemblyName();
         name.Name = GetString(AssemblyRef.records[i].Name);
         name.Version = new Version(
             AssemblyRef.records[i].MajorVersion,
             AssemblyRef.records[i].MinorVersion,
             AssemblyRef.records[i].BuildNumber,
             AssemblyRef.records[i].RevisionNumber);
         if (AssemblyRef.records[i].PublicKeyOrToken != 0)
         {
             byte[] keyOrToken = GetBlobCopy(AssemblyRef.records[i].PublicKeyOrToken);
             const int PublicKey = 0x0001;
             if ((AssemblyRef.records[i].Flags & PublicKey) != 0)
             {
                 name.SetPublicKey(keyOrToken);
             }
             else
             {
                 name.SetPublicKeyToken(keyOrToken);
             }
         }
         else
         {
             name.SetPublicKeyToken(Empty<byte>.Array);
         }
         if (AssemblyRef.records[i].Culture != 0)
         {
             name.Culture = GetString(AssemblyRef.records[i].Culture);
         }
         else
         {
             name.Culture = "";
         }
         if (AssemblyRef.records[i].HashValue != 0)
         {
             name.hash = GetBlobCopy(AssemblyRef.records[i].HashValue);
         }
         name.RawFlags = (AssemblyNameFlags)AssemblyRef.records[i].Flags;
         list.Add(name);
     }
     return list.ToArray();
 }
开发者ID:kenasogoo,项目名称:ikvm-fork,代码行数:46,代码来源:ModuleReader.cs

示例7: GetName

		public override AssemblyName GetName()
		{
			AssemblyName n = new AssemblyName();
			n.Name = name;
			n.Version = new Version(majorVersion, minorVersion, buildVersion, revisionVersion);
			n.Culture = culture ?? "";
			n.HashAlgorithm = hashAlgorithm;
			n.RawFlags = flags;
			n.SetPublicKey(publicKey != null ? (byte[])publicKey.Clone() : Empty<byte>.Array);
			n.KeyPair = keyPair;
			return n;
		}
开发者ID:Semogj,项目名称:ikvm-fork,代码行数:12,代码来源:AssemblyBuilder.cs

示例8: SetPublicKey_GetPublicKey

 public void SetPublicKey_GetPublicKey(byte[] publicKey)
 {
     AssemblyName assemblyName = new AssemblyName();
     assemblyName.SetPublicKey(publicKey);
     Assert.Equal(publicKey, assemblyName.GetPublicKey());
 }
开发者ID:dotnet,项目名称:corefx,代码行数:6,代码来源:AssemblyNameTests.cs

示例9: Main

	public static int Main ()
	{
		string basedir = BaseDirectory;

		AssemblyDefinition assembly;
		Assembly a;
		AssemblyName an;
		AssemblyBuilder ab;

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-2-lib.dll"));
		if (assembly.Name.Attributes != AssemblyAttributes.PublicKey)
			return 1;
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695-2-lib.dll"));
		if (a.GetName ().Flags != AssemblyNameFlags.PublicKey)
			return 2;

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-3-lib.dll"));
		if (Environment.Version.Major >= 2) {
			if (assembly.Name.Attributes != AssemblyAttributes.SideBySideCompatible)
				return 3;

		} else {
			if (assembly.Name.Attributes != AssemblyAttributes.PublicKey)
				return 3;
		}
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695-3-lib.dll"));
		if (a.GetName ().Flags != AssemblyNameFlags.PublicKey)
			return 4;

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695.exe"));
		if (assembly.Name.Attributes != AssemblyAttributes.SideBySideCompatible)
			return 5;
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695.exe"));
		if (a.GetName ().Flags != AssemblyNameFlags.PublicKey)
			return 6;

		an = new AssemblyName ();
		an.Name = "test-695-4-lib";
		an.SetPublicKey (publicKey);
		an.Flags = AssemblyNameFlags.Retargetable;

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		ab.Save ("test-695-4-lib.dll");

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-4-lib.dll"));
		if (assembly.Name.Attributes != (AssemblyAttributes.PublicKey | AssemblyAttributes.Retargetable))
			return 7;

		an = new AssemblyName ();
		an.Name = "test-695-5-lib";
		an.KeyPair = new StrongNameKeyPair (keyPair);
		an.Flags = AssemblyNameFlags.Retargetable;

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		ab.Save ("test-695-5-lib.dll");

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-5-lib.dll"));
		if (assembly.Name.Attributes != (AssemblyAttributes.PublicKey | AssemblyAttributes.Retargetable))
			return 8;
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695-5-lib.dll"));
		if (a.GetName ().Flags != (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable))
			return 9;

		an = new AssemblyName ();
		an.Name = "test-695-6-lib";
		an.KeyPair = new StrongNameKeyPair (keyPair);
		an.Flags = AssemblyNameFlags.Retargetable;

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		an.Flags = AssemblyNameFlags.None;
		ab.Save ("test-695-6-lib.dll");

		assembly = AssemblyDefinition.ReadAssembly (Path.Combine (basedir, "test-695-6-lib.dll"));
		if (assembly.Name.Attributes != (AssemblyAttributes.PublicKey | AssemblyAttributes.Retargetable))
			return 10;
		a = Assembly.LoadFrom (Path.Combine (basedir, "test-695-6-lib.dll"));
		if (a.GetName ().Flags != (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable))
			return 11;

		return 0;
	}
开发者ID:Profit0004,项目名称:mono,代码行数:84,代码来源:test-695.cs

示例10: Main


//.........这里部分代码省略.........
		}
#endif

		// set only the version
		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (2, 4);
#if NET_2_0
		AppDomain.CurrentDomain.Load (aname);
#else
		try {
			// culture is not set
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A6");
		} catch (FileLoadException) {
		}
#endif

		// if both culture and version are set, then the version diff
		// is ignored
		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = CultureInfo.InvariantCulture;
		aname.Version = new Version (2, 5);
		AppDomain.CurrentDomain.Load (aname);

		// loaded assembly is not signed
		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = CultureInfo.InvariantCulture;
		aname.SetPublicKey (publicKey);
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A7");
		} catch (FileLoadException) {
		}

		// if set, the culture must match
		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.Version = new Version (2, 4);
		aname.CultureInfo = new CultureInfo ("en-US");
		try {
			AppDomain.CurrentDomain.Load (aname);
			Assert.Fail ("#A8");
		} catch (FileLoadException) {
		}

		aname = new AssemblyName ();
		aname.Name = "bug79522A";
		aname.CodeBase = assemblyFile;
		aname.CultureInfo = CultureInfo.InvariantCulture;
		AppDomain.CurrentDomain.Load (aname);

		// PART B

		assemblyFile = Path.Combine (tempDir, "bug79522B.dll");
		aname = new AssemblyName ();
		aname.Name = "bug79522B";
		aname.CultureInfo = new CultureInfo ("nl-BE");
		aname.Version = new Version (2, 4, 1);
开发者ID:mono,项目名称:gert,代码行数:66,代码来源:testa.cs

示例11: __GetReferencedAssemblies

		public override AssemblyName[] __GetReferencedAssemblies()
		{
			List<AssemblyName> list = new List<AssemblyName>();
			for (int i = 0; i < AssemblyRef.records.Length; i++)
			{
				AssemblyName name = new AssemblyName();
				name.Name = GetString(AssemblyRef.records[i].Name);
				name.Version = new Version(
					AssemblyRef.records[i].MajorVersion,
					AssemblyRef.records[i].MinorVersion,
					AssemblyRef.records[i].BuildNumber,
					AssemblyRef.records[i].RevisionNumber);
				if (AssemblyRef.records[i].PublicKeyOrToken != 0)
				{
					byte[] keyOrToken = GetBlobCopy(AssemblyRef.records[i].PublicKeyOrToken);
					const int PublicKey = 0x0001;
					if ((AssemblyRef.records[i].Flags & PublicKey) != 0)
					{
						name.SetPublicKey(keyOrToken);
					}
					else
					{
						name.SetPublicKeyToken(keyOrToken);
					}
				}
				if (AssemblyRef.records[i].Culture != 0)
				{
					name.CultureInfo = new System.Globalization.CultureInfo(GetString(AssemblyRef.records[i].Culture));
				}
				else
				{
					name.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
				}
				name.Flags = (AssemblyNameFlags)AssemblyRef.records[i].Flags;
				list.Add(name);
			}
			return list.ToArray();
		}
开发者ID:koush,项目名称:mono,代码行数:38,代码来源:ModuleReader.cs

示例12: SetPublicKey

		// copied from /mcs/mcs/codegen.cs
		private void SetPublicKey (AssemblyName an, byte[] strongNameBlob) 
		{
			// check for possible ECMA key
			if (strongNameBlob.Length == 16) {
				// will be rejected if not "the" ECMA key
				an.SetPublicKey (strongNameBlob);
			} else {
				// take it, with or without, a private key
				RSA rsa = CryptoConvert.FromCapiKeyBlob (strongNameBlob);
				// and make sure we only feed the public part to Sys.Ref
				byte[] publickey = CryptoConvert.ToCapiPublicKeyBlob (rsa);
					
				// AssemblyName.SetPublicKey requires an additional header
				byte[] publicKeyHeader = new byte [12] { 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00 };

				byte[] encodedPublicKey = new byte [12 + publickey.Length];
				Buffer.BlockCopy (publicKeyHeader, 0, encodedPublicKey, 0, 12);
				Buffer.BlockCopy (publickey, 0, encodedPublicKey, 12, publickey.Length);
				an.SetPublicKey (encodedPublicKey);
			}
		}
开发者ID:razzfazz,项目名称:mono,代码行数:22,代码来源:Al.cs

示例13: Main

	static void Main ()
	{
		string basedir = AppDomain.CurrentDomain.BaseDirectory;

		AssemblyDefinition assembly;
		Assembly a;
		AssemblyName an;
		AssemblyBuilder ab;

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libA.dll"));
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#A1");

		a = Assembly.LoadFrom (Path.Combine (basedir, "libA.dll"));
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#A2");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libB.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#B1");
#elif NET_2_0
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.DisableJITcompileOptimizer, assembly.Name.Flags, "#B1");
#else
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.Retargetable, assembly.Name.Flags, "#B1");
#endif

		a = Assembly.LoadFrom (Path.Combine (basedir, "libB.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#B2");
#elif NET_2_0
		Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer, a.GetName ().Flags, "#B2");
#else
		Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable, a.GetName ().Flags, "#B2");
#endif

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libC.dll"));
#if NET_2_0
		Assert.AreEqual (AssemblyFlags.SideBySideCompatible, assembly.Name.Flags, "#C1");
#else
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#C1");
#endif

		a = Assembly.LoadFrom (Path.Combine (basedir, "libC.dll"));
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#C2");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libD.dll"));
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#D1");

		a = Assembly.LoadFrom (Path.Combine (basedir, "libD.dll"));
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#D2");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "test.exe"));
		Assert.AreEqual (AssemblyFlags.SideBySideCompatible, assembly.Name.Flags, "#E1");

		a = Assembly.LoadFrom (Path.Combine (basedir, "test.exe"));
		Assert.AreEqual (AssemblyNameFlags.PublicKey, a.GetName ().Flags, "#E2");

		an = new AssemblyName ();
		an.Name = "libE";
		an.SetPublicKey (publicKey);
#if ONLY_1_0
		an.Flags = AssemblyNameFlags.None;
#elif NET_2_0
		an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer;
#else
		an.Flags = AssemblyNameFlags.Retargetable;
#endif

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		ab.Save ("libE.dll");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libE.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#E1");
#elif NET_2_0
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.DisableJITcompileOptimizer, assembly.Name.Flags, "#E1");
#else
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.Retargetable, assembly.Name.Flags, "#E1");
#endif

		an = new AssemblyName ();
		an.Name = "libF";
		an.KeyPair = new StrongNameKeyPair (keyPair);
#if ONLY_1_0
		an.Flags = AssemblyNameFlags.None;
#elif NET_2_0
		an.Flags = AssemblyNameFlags.EnableJITcompileOptimizer;
#else
		an.Flags = AssemblyNameFlags.Retargetable;
#endif

		ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an,
			AssemblyBuilderAccess.Save, basedir);
		ab.Save ("libF.dll");

		assembly = AssemblyFactory.GetAssembly (Path.Combine (basedir, "libF.dll"));
#if ONLY_1_0
		Assert.AreEqual (AssemblyFlags.PublicKey, assembly.Name.Flags, "#F1");
#elif NET_2_0
		Assert.AreEqual (AssemblyFlags.PublicKey | AssemblyFlags.DisableJITcompileOptimizer, assembly.Name.Flags, "#F1");
#else
//.........这里部分代码省略.........
开发者ID:mono,项目名称:gert,代码行数:101,代码来源:test.cs


注:本文中的AssemblyName.SetPublicKey方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。