我有个问题不知道能不能解决。我在 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.dllReleaseOutput.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
    
  • 更改 key 文件 - 使用 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/

    10-17 00:07