我有个问题不知道能不能解决。我在 Visual Studio 2005 上有一个 C# 项目,我想根据预处理器常量创建不同的 DLL 名称。此刻我拥有的是预处理器常量、两个snk 文件和两个程序集的guid。我还创建了两个配置(Debug 和 Debug Preprocessor),它们使用适当的 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;要创建两个不同的 AssemblyName,您有两个选择。
程序集名称构建为 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
工具创建两个 key 文件,并在 AssemblyInfo.cs
中:#if SOME_COMPILER_SYMBOL
[assembly: AssemblyKeyFile("FirstKey.snk")]
#else
[assembly: AssemblyKeyFile("SecondKey.snk")]
#endif
就 GAC 所知,这两个选项都将导致两个不同的程序集 - 因为它比较的是完整的程序集名称,而不是“简单”名称。
关于c# - 如何在一个项目中创建不同的 DLL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/606652/