我正在使用 Visual Studio 2008,并且想要创建一种容器项目,其中包含许多必须与解决方案一起安装的 DLL。我希望它们位于一个单独的项目中,以便它们可以轻松地作为一个组附加到解决方案中。

我创建了一个名为 TEST 的空项目,使用“内容”构建操作将 DLL 添加到其中,并将它们设置为“始终复制”。这一切都完全按照我想要的方式进行。问题是,如果我将 TEST 项目输出类型设置为“控制台应用程序”或“Windows 应用程序”,则它不会构建,因为没有入口点。如果我将输出类型设置为“类库”,它会构建,但最终会得到一个我并不真正想要的额外 TEST.DLL 文件。

无论如何可以将输出类型设置为“无”吗?我希望生成操作发生(因此我的 DLL 被复制),但我不希望创建虚拟类程序集。有任何想法吗?

谢谢!

有帮助吗?

解决方案

以下分步指南的假设:

假设您有一个包含两个项目的解决方案:

  • Main: :您的主要(启动)项目。
  • BundledDLLs: :一个图书馆项目,其中包含 .dll应该最终位于主项目的输出目录中。

分步指南:

在 Visual Studio 中实现目标的最简单方法可能如下:

  1. 全部添加 .dllBundledDLLs 并设置他们的 复制到输出目录如果较新则复制.

    这是在 项目浏览器特性 视窗。

  2. 配置 BundledDLLs的输出目录与 Main的输出目录。

    这可以在 建造 的选项卡 BundledDLL项目属性 页。在中输入类似以下内容 输出路径 文本框:

    ..\Main\bin\Debug
    
  3. 设置 BundledDLLs 作为一个依赖项 Main.

    不要 添加 BundledDLLs 作为项目参考 Main, ,正如您通常所做的那样;相反,使用 项目依赖关系 对话框到 .这将告诉构建工具,无论何时 Main 建成, BundledDLLs 需要先建造。

    通过右键单击来执行此操作 Main 项目节点打开上下文菜单;选择 项目依赖... 从那里。在现在打开的对话框中,首先选择 Main 从下拉列表中;然后检查 BundledDLLs 在下面的项目列表中。 BundledDLLs 现在已注册为依赖项 Main.

    附: 其缺点之一是 不是 在中具有显式程序集引用 Main 是某些工具可能无法识别依赖性。例如,ClickOnce 部署可能无法正常工作。

  4. 添加构建后事件 BundledDLLs 删除多余的 BundledDLLs.dll.

    正如你所说,你不想要,也不需要,当 BundledDLLs 建成。因此,添加一个构建后事件,只需删除此事件 .dll 一旦它被创建。

    打开 构建事件 标签进入 BundledDLLs项目属性 页面,然后在构建后文本框中输入类似以下内容:

    DEL "$(TargetDir)\$(TargetName).*"
    

    (如果你想知道:您没有将此项目添加为项目引用的原因 Main 早些时候是因为如果你这样做了, Main 会寻找 BundledDLLs.dll, ,它无法找到它,因为您实际上并不希望生成这样的文件。)

    附: 添加此类构建后步骤的一个缺点是它可能会干扰增量构建。如果您的项目在此之后不断从头开始重新编译,那么您最好删除构建后步骤并接受额外的步骤 BundledDLLs.dll 在解决方案的输出目录中。

其他提示

另一种选择是使用makefile项目,它不需要你构建/链接任何东西。

在项目属性中(右键单击解决方案资源管理器中的属性,然后单击“属性”),在“配置属性”下,然后在“常规”下,选择“Makefile”,然后选择“Makefile”。来自“配置类型”下拉式菜单。构建输出将包括警告“属性'NMakeBuildCommandLine'不存在...跳过”但构建将成功,而不构建任何DLL / exe /等。

虽然此处的其他答案可能更好地满足您的特定需求,但指定makefile会更直接地回答问题标题“可能创建输出类型为none的Visual Studio项目?”我希望这对于那些谷歌有意义并在这里降落的人来说非常有用。

在#winapi freenode irc频道中感谢Xeek分享此提示。

您可以将文件放在解决方案文件夹。您的一个项目可以有一个构建操作来执行复制,但由于它们不在项目中,因此它们不会尝试“构建”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top