【问题标题】:How to build a DLL with custom file extension in a C# project?如何在 C# 项目中构建具有自定义文件扩展名的 DLL?
【发布时间】:2020-05-18 14:25:22
【问题描述】:

有没有办法将 C# DLL 项目(Visual Studio)编译成具有自定义扩展名的文件?例如 plugin.cpx 而不是 plugin.dll (cpx = Custom Plugin eXtension!)

我可以使用任何我想要的扩展吗?

【问题讨论】:

  • 非常不清楚这应该解决什么问题。将名称更改为 plugin.cpx.dll 是一种简单的方法。
  • @HansPassant 我的意思是自动完成。

标签: c# visual-studio dll


【解决方案1】:

我将其添加为新答案,因为它就是这样。在很多方面,它比我之前的产品要容易得多。

您可以通过手动编辑项目的.csproj 文件来明确指定目标扩展。

在“解决方案资源管理器”中,右键单击项目并选择“卸载项目”命令。然后,再次右键单击并选择“Edit MyProject.csproj”(其中“MyProject”显然是实际名称)。

要将扩展更改应用于所有配置和/或平台,请在文件顶部附近添加以下三行(就在其他PropertyGroup条目的第一个之前):

  <PropertyGroup>
    <TargetExt>.cpx</TargetExt>
  </PropertyGroup>

然后保存文件,将其关闭,然后“重新加载”项目(同样,通过在解决方案资源管理器中单击鼠标右键)。

要仅为特定配置或平台更改扩展,请在与该配置相关的 PropertyGroup 内添加 TargetExt 行。

【讨论】:

  • 不错,但不适合我。似乎我的 .csproj 文件不是“旧”格式。我搜索了“TargetExt”和“dll”,但找不到任何有用的东西。
  • @AmirSinaMashayekh 默认情况下,文件中不会有任何 TargetExt 内容。文件中有&lt;PropertyGroup&gt; xml 样式的行吗?
  • 是的。很多。
  • @AmirSinaMashayekh 如果你在第一行之前插入上面的三行,会发生什么?没有?还是项目无法加载或构建?
【解决方案2】:

我可以使用任何我想要的扩展吗?

是的,你可以,但它有点“棘手”。

对于 C# 项目,您需要添加自定义“构建后事件”来重命名输出文件。对于 DLL 项目(如您的项目),您可以在“属性”窗口的“构建事件”选项卡中添加如下所示的构建后命令:

注意:请务必使用$(TargetName) 宏, $(TargetFileName),因为后者将隐含包含.dll 扩展名。但你可以使用:

rename "$(TargetDir)$(TargetFileName)" "$(TargetName).cpx"

编辑:此外,您需要告诉构建器在某个阶段删除任何旧版本的.cpx 文件。这可以作为预构建事件来完成,如下所示:

IF EXIST "$(TargetDir)$(TargetName).cpx" del "$(TargetDir)$(TargetName).cpx"

否则,重命名输出文件的尝试将失败(因为新的“目标”已经存在)。

EDIT-2:如 OP 评论中所述,如果没有 " 引号,如果文件路径中有空格,则构建前和构建后命令将失败。

【讨论】:

  • 抱歉,您能解释一下吗?我正在使用 VS-2019。我右键单击项目,但没有“高级”选项。然后我选择了“属性”并打开了项目属性“选项卡”(不是您发送的窗口)。就像您发送的内容一样,但那里没有“常规”或“高级”。 “属性>构建”中有一个“高级...”按钮,但那里没有关于文件扩展名的任何内容。
  • 我的项目是 C# (WPF)。不是 C++。
  • @AmirSina 查看编辑(您最初没有包含 C# 标签,但无论如何我正在努力添加该选项)。
  • @AdrianI 谢谢。我认为该方法对于任何项目类型都是相同的。请像这样编辑您的答案:IF EXIST "$(TargetDir)$(TargetName).cpx" del "$(TargetDir)$(TargetName).cpx"rename "$(TargetDir)$(TargetName).dll" $(TargetName).cpx;如果文件路径或文件名中有空格字符,不带引号会出错。
  • @AmirSina 非常感谢您指出对 " 引号的需求 - 请参阅最新编辑。
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 2018-08-17
  • 1970-01-01
相关资源
最近更新 更多