【问题标题】:compile multiple dlls编译多个dll
【发布时间】:2010-01-04 03:30:06
【问题描述】:

我必须为我的项目编译多个 dll(大约 100 个)。 每个项目/构建只有一个不同的源代码文件。 这些 dll 应该包含一个索引。比如calc0023.dll

最简单的方法是什么?

【问题讨论】:

  • “每个项目/构建只有一个不同的源代码文件”是什么意思?您的意思是 project1 和 project2 将具有完全相同的源文件,除了一个?这很奇怪,但如果这就是你的意思......
  • 对不起,我的描述很短。每个 dll 只有 2 个源文件,一个文件特定于每个 dll,第二个文件对所有文件都是相同的。
  • 我不想为每个dll创建一个项目文件

标签: msbuild


【解决方案1】:

.cmd 脚本:

for %%f in (*.cs) do (
    csc.exe /target:dll /o:outdir\%%~nf.dll %%f CommonFile.cs 
)

如果所有源文件都在同一个目录中,则必须从循环中排除公共文件。

for %%f in (*.cs) do (
    if not %%f==CommonFile.cs (
        csc.exe /target:dll /o:outdir\%%~nf.dll %%f CommonFile.cs 
    )
)

前面的脚本使用唯一源文件的名称来命名生成的 DLL。如果要对文件名使用数字索引,则需要引入另一个变量。

setlocal enabledelayedexpansion
set count=1
for %%f in ("*.cs") do (
    if not %%f==CommonFile.cs (
        set CSTR=00!COUNT!
        set OUTFILE=Calc!CSTR:~-3!
        csc.exe /target:dll /o:outdir\!OUTFILE!.dll %%f CommonFile.cs
        set /a COUNT=!COUNT!+1
    )
)
endlocal

【讨论】:

  • for %%f in (*.vb) do (msbuild /p:Configuration=Debug;appname=%%~nf "MyDll.proj" )
【解决方案2】:

无论您使用的是什么版本的 (visual studio??),我肯定会在命令行上启动它们。最简单可行的方法:

编写一个脚本,使用 devenv 调用每个项目的项目/解决方案文件。

请参阅 msdn 页面了解如何build using the command line

【讨论】:

  • 你不需要 devenv。如果您使用的是 VS2005 或更高版本,则可以使用 MSBUILD 从命令行构建 vs 项目。
【解决方案3】:

如果您在每个 dll 中有这么多代码重复,我建议您使用所有 DLL 通用的代码并创建该代码/函数的 DLL。然后创建内部调用主 DLL 的其余 DLL。但是要具有特定命名和构建顺序等功能,您需要编写批处理文件。项目选项中的 Visual Studio 会显示可以帮助您构建项目的各种命令行参数。

但我不知道您要通过创建如此多的 DLL 来解决什么特殊要求,这将使您难以管理 DLL 本身。如果您使用重复代码创建一个通用 DLL,我看到的一个好处是:如果您更改主代码中的任何内容,您只需要重新编译一个项目而不是 100 个项目,而不是编译 100 个项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多