通过 VS 构建时,有什么方法可以更改输出程序集文件名?
我有两个(四个,包括 Debug/Release 分支)配置,它们的功能有点不同,应该以不同的方式使用,但应该保持在同一个目录中。因此,最好的是 ProjectName.dll 和 ProjectName.Test.dll。
请不要建议更改 AssemblyName 参数(我通过谷歌搜索 SO 看到的唯一提示),它们不一样。AssemblyName 还会更改每个类的完整类名,这是不希望的。我想改变只有文件名和内保持任何组件unthouched。
现在我已经通过将 AfterBuild 目标添加到 .csproj 中来完成此操作,该 .csproj 使用重命名复制程序集,但我不喜欢这个解决方案。可以更容易吗?
还尝试将 OutputPath 设置为 SomeWhere\ProjectName.Test.dll - 它只是创建目录 ProjectName.Test.dll 并将 $(AssemblyName).dll 放在那里。
UPD:更清晰的解释,为什么 AssemblyName 更改不是我想要的。AssemblyName 也是程序集中每个类型的一部分(它指向程序集,类型来自哪里),它直接应用于类型解析。例如,我为 ISome 接口引用了 ProgName.dll。解析器尝试查找 ProgName(在类型的元数据中设置)但什么也没找到,因为没有 ProgName,只有 ProgName.Test。当它们都具有 AssemblyName ProgName(不是 .Test)时,它将起作用。当然,如果我处理不同的文件名。
UPD2:更好地解释我在谈到 AssemblyName 时的意思:
红色标记的是程序集解析器试图找到的内容。我的两个配置中的程序集具有相同的接口,因此客户不必关心他需要找到什么程序集。两者都应该具有相同的 AssemblyName,但不同的文件名(存储在同一文件夹中)。
我使用 ILRepack 将多个程序集合并为一个:
A 和 C 都引用了 B.dll。如果我改为合并 B.Test.dll(使用 AssemblyName“B.Test”),则引用将保持引用。如果我合并 B.dll,则不会保留任何引用(里面的所有代码)。所以我需要 B.Test.dll(使用这个文件名)来拥有 AssemblyName“B”。
这可能是一个重复的问题,但我无法找到答案.
我唯一的问题是如何获得FontWinForms中使用的高度(上升+下降,没有任何间距),以像素为单位.我有Segoe UI 8.25 Regular字体.
Font.Height 给我15(像素?)
我可以使用字体指标和使用FontFamily:
GetEmHeight 给了我2048.GetCellAscent 给我2210(大于EM?)GetCellDescent 给了我514根据MSDN的公式
我应该做以下事情:
(ascent + descent) * font.Height / emHeight
which is
(514 + 2210) * 15 / 2210 = 19 pixels.
Run Code Online (Sandbox Code Playgroud)
所以:
TextRenderer.MeasureText对于"Tg"字符串给我13 px.我做错了什么以及这些价值观是如何相互关联的?目标是尽可能接近截图的测量结果.
TextRenderer.MeasureText 使用大量资源,我不能在抽奖期间随时使用它.