运维开发网

c# – 如何在一个项目中创建不同的DLL?

运维开发网 https://www.qedev.com 2020-05-26 14:34 出处:网络 作者:运维开发网整理
我有一个问题,我不知道它是否可以解决.我在Visual Studio 2005上有一个C#项目,我想根据预处理器常量创建不同的DLL名称.我现在拥有的是预处理器常量,两个snk文件和两个程序集的guid.我还创建了两个配置(调试和调试预处理器),并使用适当的snk和guid完美编译. #if PREPROCESSOR_CONSTANT [assembly: AssemblyTitle("MyLib
我有一个问题,我不知道它是否可以解决.我在Visual Studio 2005上有一个C#项目,我想根据预处理器常量创建不同的DLL名称.我现在拥有的是预处理器常量,两个snk文件和两个程序集的guid.我还创建了两个配置(调试和调试预处理器),并使用适当的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而言,这两个选项都会产生两个不同的程序集 – 因为它比较了完整的程序集名称,而不是“简单”名称.

0

精彩评论

暂无评论...
验证码 换一张
取 消