有没有办法在使用VS构建时更改输出程序集文件名?
我有两个配置(包括Debug / Release分支),具有略有不同的功能,应该以不同的方式使用,但应保留在相同目录中。因此,最好的方案是ProjectName.dll和ProjectName.Test.dll。
请不要建议更改AssemblyName参数(这是我通过谷歌SO看到的唯一提示),它们并不相同。 AssemblyName还会更改每个类的完整类名,这是不希望发生的。我只想更改文件名,保持程序集内部任何内容不变。
现在,我已经通过在.csproj中添加AfterBuild目标来复制文件并重命名来完成了此操作,但我不喜欢这种解决方案。会不会更容易?
也尝试将OutputPath设置为SomeWhere \ ProjectName.Test.dll-它只是创建了ProjectName.Test.dll目录并将$(AssemblyName).dll放置在那里。
更新:更清晰的说明,为什么AssemblyName更改不是我想要的。 AssemblyName也是程序集中每个类型的一部分(它指向程序集,从中找到类型),并直接应用于类型解析。例如,我引用ISome接口的ProgName.dll。解析器尝试查找ProgName(作为类型元数据中设置的值),但找不到任何内容,因为没有ProgName,只有ProgName.Test。当它们都具有AssemblyName ProgName(而不是.Test时),它将起作用。当然,如果我处理不同的文件名。
更新2:关于我在谈论AssemblyName时所说的内容的更好解释:
红色标记是程序集解析器尝试查找的内容。我的两个配置中都有相同的接口,因此客户端不应关心他需要查找哪个程序集。两者都应具有相同的AssemblyName,但具有不同的文件名(以存储在同一文件夹中)。
我使用ILRepack将多个程序集合并为一个:
我有两个配置(包括Debug / Release分支),具有略有不同的功能,应该以不同的方式使用,但应保留在相同目录中。因此,最好的方案是ProjectName.dll和ProjectName.Test.dll。
请不要建议更改AssemblyName参数(这是我通过谷歌SO看到的唯一提示),它们并不相同。 AssemblyName还会更改每个类的完整类名,这是不希望发生的。我只想更改文件名,保持程序集内部任何内容不变。
现在,我已经通过在.csproj中添加AfterBuild目标来复制文件并重命名来完成了此操作,但我不喜欢这种解决方案。会不会更容易?
也尝试将OutputPath设置为SomeWhere \ ProjectName.Test.dll-它只是创建了ProjectName.Test.dll目录并将$(AssemblyName).dll放置在那里。
更新:更清晰的说明,为什么AssemblyName更改不是我想要的。 AssemblyName也是程序集中每个类型的一部分(它指向程序集,从中找到类型),并直接应用于类型解析。例如,我引用ISome接口的ProgName.dll。解析器尝试查找ProgName(作为类型元数据中设置的值),但找不到任何内容,因为没有ProgName,只有ProgName.Test。当它们都具有AssemblyName ProgName(而不是.Test时),它将起作用。当然,如果我处理不同的文件名。
更新2:关于我在谈论AssemblyName时所说的内容的更好解释:
![Resolver data screenshot](https://istack.dev59.com/x4AxZ.webp)
我使用ILRepack将多个程序集合并为一个:
- A.dll
- B.dll(或B.Test.dll,取决于配置)
- C.dll