根据配置更改输出 dll 的名称

hel*_*ich 1 .net com-interop visual-studio

看起来应该很简单,但基本上我有两个类库配置。一个是普通的 .NET 4.0 配置,另一个配置为注册 COM Interop,并另外定义了一个编译符号,以便我可以使用预处理器指令解决一些与 COM 相关的问题。

问题是,部署时,这两个 DLL 必须位于同一文件夹中,调用应用程序才能使用它们(根据设计,对此无能为力)。将每个配置编译到各自的bin/子文件夹时,一切都运行良好,包括使用不同的强名称密钥对两个配置进行签名,以便 GAC 看到两个不同的程序集,即使具有相同的名称和版本。

但是将它们放在同一个文件夹中需要重命名,这就是问题所在。

如果在 Visual Studio 中我可以有条件地在“应用程序”选项卡中设置“程序集名称”属性,那就太棒了,但看起来该选项卡是项目范围的,而不是配置范围的。除此之外,有没有什么方法可以指定不同的文件名,这样就不会导致运行时问题,更不用说开发人员的理智问题了?我的目标是能够向 .NET 客户端提供 COM 不支持的功能,同时仍然与 COM 兼容。我非常不希望将所有内容复制并粘贴到另一个只有不同程序集名称的项目中......

Cod*_*ter 5

您可以通过编辑.csproj文件来做到这一点。<AssemblyName>从 main 中删除该元素<PropertyGroup>并将其放入相应的特定于配置的 PropertyGroup 中:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <AssemblyName>StackOverflow26265487.Debug</AssemblyName>
    <!-- ... -->
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <AssemblyName>StackOverflow26265487.Release</AssemblyName>
    <!-- ... -->
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)