Msbuild 编译多个DLL

Msbuild 编译多个DLL,msbuild,Msbuild,我必须为我的项目编译多个DLL(大约100个)。 每个项目/构建只有一个不同的源代码文件。 这些DLL应包含索引。比如calc0023.dll 最简单的方法是什么?无论您使用的是(visual studio???)的任何版本,我都会在命令行上启动这些功能。最简单可行的方法是: 编写一个脚本,使用devenv调用每个项目/解决方案文件 请参阅msdn页面,了解如何操作。无论您使用的是(visual studio???)的任何版本,我都会在命令行上启动这些功能。最简单可行的方法是: 编写一个脚本,使

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

最简单的方法是什么?

无论您使用的是(visual studio???)的任何版本,我都会在命令行上启动这些功能。最简单可行的方法是:

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

请参阅msdn页面,了解如何操作。

无论您使用的是(visual studio???)的任何版本,我都会在命令行上启动这些功能。最简单可行的方法是:

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


查看msdn页面,了解如何操作。

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


但是,我不知道创建这么多DLL将满足什么特殊要求,这将使您难以管理DLL本身。如果您使用重复代码创建一个公共DLL,我看到的一个好处是:如果您更改了主代码中的任何内容,您只需要重新编译一个项目,而不是编译100个项目。如果您在每个DLL中有如此多的代码重复,我建议您:,获取所有DLL的通用代码,并创建该代码/函数的DLL。然后创建其余的DLL,这些DLL在内部调用主DLL。但是,要拥有特定的命名和构建顺序等特性,您需要编写批处理文件。项目选项中的Visual studio显示各种命令行参数,这些参数可以帮助您构建项目

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

a.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
a.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

“每个项目/构建只有一个不同的源代码文件”是什么意思?你是说project1和project2除了一个源文件外,其他源文件都是完全相同的吗?这很奇怪,但如果这就是你的意思…对不起,我的描述很短。每个dll只有2个源文件,每个dll有一个特定的文件,第二个文件对所有dll都是相同的。我不想为每个dll创建一个项目文件“每个项目/构建只有一个不同的源代码文件”是什么意思?你是说project1和project2除了一个源文件外,其他源文件都是完全相同的吗?这很奇怪,但如果这就是你的意思…对不起,我的描述很短。每个dll只有2个源文件,每个dll有一个特定的文件,第二个文件对所有dll都是相同的。我不想为每个dll创建一个项目文件。您不需要devenv。如果您使用的是VS2005或更高版本,则可以使用MSBUILD从命令行生成vs项目。您不需要devenv。如果您使用的是VS2005或更高版本,则可以使用MSBUILD从命令行生成vs项目。对于(*.vb)中的%%f,对于(*.vb)do(MSBUILD/p:Configuration=Debug;appname=%%~nf“MyDll.proj”)中的%%f(MSBUILD/p:Configuration=Debug;appname=%%~nf“MyDll.proj”)