【问题标题】:Project with different Outputfiles具有不同输出文件的项目
【发布时间】:2012-11-30 16:53:18
【问题描述】:

我创建了一个项目,其中包含两个文件夹。 “src”文件夹包含核心元素,“plugin”文件夹包含不同的插件(每个插件=一个文件)。

这里是一个例子:

MyProject
|_src
    |_attributeclass.cs
    |_basepluginparent.cs
    |_otherneededclass.cs
|_plugins
    |_plugin1extendsfrombaseclass.cs
    |_plugin2extendsfrombaseclass.cs
    |_plugin3extendsfrombaseclass.cs
    |_plugin4extendsfrombaseclass.cs

现在我想开始构建,它会创建 5 个文件: 1个baseplugin.dll(包含所有3个核心类) 4 个名为 plugin1.dll ... plugin4.dll 的文件

所以所有插件都引用基类,但我也需要基类作为自己的库

我该怎么做?

【问题讨论】:

    标签: visual-studio msbuild visual-studio-2012


    【解决方案1】:

    如果你不想使用 MSBuild 来处理它,你能不能这样做:

    <Csc Sources="_src\*.cs" 
         TargetType="library"
         OutputAssembly="Out\Base.dll" />
    

    编译base.dll,然后创建插件的itemgroup并批量构建:

    <ItemGroup>
      <Plugin Include="_plugins\*.cs" />
    </ItemGroup>
    
    <Message Text="%(Plugin.Identity) => %(Plugin.Filename).dll" />
    
    <Csc Sources="%(Plugin.Identity)"
         References="Out\Base.dll"
         TargetType="library"
         OutputAssembly="Out\%(Plugin.Filename).dll" />
    

    这将为每个源文件提供一个插件 dll - 每个都链接到 base.dll。

    编辑: 要使其成为项目构建的一部分,请将上述所有内容包装在一个目标中,例如:

    <Target Name="BeforeBuild">
    
    </Target>
    

    并将其放在项目文件的末尾(卸载项目并编辑项目文件)。

    【讨论】:

    • 非常感谢,几乎完美的解决方案,我只需要做一些小改动就可以让它工作。完美的第一个答案:-)
    【解决方案2】:

    创建五个项目:一个构建 coreclasses.dll,另一个构建每个插件。

    【讨论】:

    • 是的,这就是我的实际解决方案,但它很费力,因为不仅有四个,而且有近 20 个不同的插件,所以我想在一个解决方案中解决这个问题。
    • 一个解决方案可以有多个项目,您可以将项目的所有配置放入一个共享的 .props 文件中——然后每个项目文件只需要包含要使用的文件列表建成。
    • 我找到了一种从一个项目 (solution) 获取多个输出 dll 的解决方案,但我也需要一种可能性,使构建依赖于文件夹。你知道吗?
    • 我建议为每个最终输出设置不同的项目。
    • 但是(我认为)我的项目最好只有一个包含所有插件的项目,因为所有插件都依赖于 coreclass 并且应该是 childclasses。请稍等,我编辑问题:- )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多