我有一个问题,我不知道它是否可以解决.我在Visual Studio 2005上有一个C#项目,我想根据预处理器常量创建不同的DLL名称.我现在拥有的是预处理器常量,两个snk文件和两个程序集的guid.我还创
#if PREPROCESSOR_CONSTANT [assembly: AssemblyTitle("MyLibraryConstant")] [assembly: AssemblyProduct("MyLibraryConstant")] #else [assembly: AssemblyTitle("MyLibrary")] [assembly: AssemblyProduct("MyLibrary")] #endif
现在,我必须将两个程序集放入GAC.添加第一个组件没有问题,但第二个组件没有问题.
如何从一个Visual Studio项目创建两个或更多不同的程序集?
有可能我忘了在“AssemblyInfo.cs”中包含一个新行来根据预处理器常量更改DLL名称吗?
以下是Post-Build事件的示例:if "$(ConfigurationName)" == "Debug" goto Debug if "$(ConfigurationName)" == "Release" goto Release goto End :Debug del "$(TargetDir)DebugOutput.dll" rename "$(TargetPath)" "DebugOutput.dll" :Release del "$(TargetDir)ReleaseOutput.dll" rename "$(TargetPath)" "ReleaseOutput.dll" :End
将DebugOutput.dll和ReleaseOutput.dll更改为正确的文件名.您可以更改“Debug”和“Release”以支持其他配置,并添加部分以支持更多配置.
该脚本将创建两个具有不同文件名的dll;要创建两个不同的AssemblyNames,您有两个选项.
程序集名称构建为follows:
Name <,Culture = CultureInfo> <,Version = Major.Minor.Build.Revision> <, StrongName> <,PublicKeyToken> '\0'
因此,您必须更改文化信息,版本或强名称.
两个最简单的选项是:
>更改装配版本:
#if SOME_COMPILER_SYMBOL [assembly: AssemblyVersion("1.0.0.0")] #else [assembly: AssemblyVersion("1.0.0.1")] #endif
>更改密钥文件 – 使用sn工具和AssemblyInfo.cs创建两个密钥文件:
#if SOME_COMPILER_SYMBOL [assembly: AssemblyKeyFile("FirstKey.snk")] #else [assembly: AssemblyKeyFile("SecondKey.snk")] #endif
就GAC而言,这两个选项都会产生两个不同的程序集 – 因为它比较了完整的程序集名称,而不是“简单”名称.