Visual studio 可以创建输出类型为“的Visual Studio项目”;没有;?

Visual studio 可以创建输出类型为“的Visual Studio项目”;没有;?,visual-studio,projects-and-solutions,Visual Studio,Projects And Solutions,我正在使用VisualStudio2008,希望创建一种容器项目,其中包含许多必须随解决方案一起安装的DLL。我希望他们在一个单独的项目中,这样他们就可以作为一个组轻松地附加到解决方案中 我创建了一个空的项目调用测试,用“Content”的构建操作将我的DLL添加到其中,并将它们设置为“总是复制”。这一切都是我想要的。问题是,如果我将测试项目输出类型设置为“控制台应用程序”或“Windows应用程序”,它将不会生成,因为没有入口点。如果我将输出类型设置为“类库”,它会生成,但最终会生成一个我并不

我正在使用VisualStudio2008,希望创建一种容器项目,其中包含许多必须随解决方案一起安装的DLL。我希望他们在一个单独的项目中,这样他们就可以作为一个组轻松地附加到解决方案中

我创建了一个空的项目调用测试,用“Content”的构建操作将我的DLL添加到其中,并将它们设置为“总是复制”。这一切都是我想要的。问题是,如果我将测试项目输出类型设置为“控制台应用程序”或“Windows应用程序”,它将不会生成,因为没有入口点。如果我将输出类型设置为“类库”,它会生成,但最终会生成一个我并不真正想要的额外TEST.DLL文件

是否有必要将输出类型设置为“无”?我希望生成操作发生(以便复制我的DLL),但不希望创建虚拟类程序集。有什么想法吗


谢谢

您可以将文件放在项目中,而不是放在项目中。您的一个项目可以具有执行复制的生成操作,但由于它们不在项目中,因此它们不会尝试“生成”。

以下分步指南的假设: 假设您有一个包含两个项目的解决方案:

  • Main
    :您的主要(启动)项目
  • BundledDLLs
    :一个库项目,其中包含应在主项目的输出目录中结束的
    .dll
分步指南: 在Visual Studio中实现目标的最简单方法可能是:

  • 将所有
    .dll
    添加到
    bundleDlls
    中,并将其复制到输出目录,以便在较新时进行复制。

    这是在项目资源管理器和属性窗口中完成的

  • bundleddll
    的输出目录配置为与
    Main
    的输出目录相同。

    这可以在
    BundledDLL
    的项目属性页面的构建选项卡中完成。在输出路径文本框中输入如下内容:

  • 设置
    bundleDlls
    作为
    Main
    的依赖项

    不要像通常可能的那样,将
    BundledDLLs
    作为项目引用添加到
    Main
    ;相反,请使用“项目依赖项”对话框来创建。这将告诉构建工具,无论何时构建
    Main
    ,都需要首先构建
    bundleddll

    通过右键单击
    Main
    project节点来打开关联菜单;选择项目依赖项。。。从那里开始。在现在打开的对话框中,首先从下拉列表中选择
    Main
    ;然后在下面的项目列表中选中
    BundledDLLs
    BundledDLLs
    现在注册为
    Main
    的依赖项

    p.S.:
    Main
    中没有明确的程序集引用的一个缺点是某些工具可能无法识别依赖项。例如,ClickOnce部署可能无法正常工作

  • bundleDlls
    添加生成后事件,删除多余的
    bundleDlls.dll

    正如您所说,您不希望也不需要在构建
    BundledDLLs
    时生成的虚拟输出。因此,添加一个生成后事件,该事件只需在创建后删除此
    .dll

    BundledDLLs
    的项目属性页面中打开生成事件选项卡,并在生成后文本框中输入如下内容:

    DEL "$(TargetDir)\$(TargetName).*"
    
    (如果您想知道:您之前没有将此项目添加为
    Main
    的项目引用的原因是,如果您这样做,
    Main
    将查找
    BundledDLLs.dll
    ,因为您实际上不希望生成这样的文件,所以无法找到该项目。)

    p.S.:添加这种构建后步骤的一个缺点是它可能会干扰增量构建。如果在此之后您的项目继续从头开始重新编译,您最好删除构建后步骤,并在解决方案的输出目录中使用额外的
    BundledDLLs.dll


  • 另一种选择是使用makefile项目,它不需要构建/链接任何内容

    在项目属性中(右键单击解决方案资源管理器中的属性并单击“属性”),在“配置属性”下,然后在“常规”下,从“配置类型”下拉菜单中选择“Makefile”。生成输出将包含警告“属性'NMakeBuildCommandLine'不存在…正在跳过”,但生成将成功,而不会生成任何dll/exe/etc

    虽然这里的其他答案可能更好地满足您的特定需求,但指定一个makefile更直接地回答了题为“是否可以创建输出类型为none的Visual Studio项目?”的问题,我希望这对在谷歌上搜索相关内容并登陆此处的人有用


    winapi freenode irc频道中的Xeek分享了这一技巧,这要归功于Xeek。

    我原本也想回答这个问题,但我们的团队不得不放弃解决方案文件夹,因为在多个解决方案文件中的维护是巨大的。我们最终做了OP正在做的事情,并忽略了生成的.dll:“womp”建议,我希望将dll内容完全封装在他们自己的项目中,而不必在其他地方进行维护。我倾向于忽略垃圾DLL(毕竟只有3K)。这样看起来有点“凌乱”。顺便提一句,我这样做是为了SQL Server Compact Edition程序集。如果不将BundleDlls添加为对Main的项目引用,请详细说明如何从Main中的代码内部引用BundleDlls类?谢谢@简:如果你想使用一个类或其他类型,你需要
    DEL "$(TargetDir)\$(TargetName).*"