可以创建输出类型为“none”的 Visual Studio 项目吗?
-
07-07-2019 - |
题
我正在使用 Visual Studio 2008,并且想要创建一种容器项目,其中包含许多必须与解决方案一起安装的 DLL。我希望它们位于一个单独的项目中,以便它们可以轻松地作为一个组附加到解决方案中。
我创建了一个名为 TEST 的空项目,使用“内容”构建操作将 DLL 添加到其中,并将它们设置为“始终复制”。这一切都完全按照我想要的方式进行。问题是,如果我将 TEST 项目输出类型设置为“控制台应用程序”或“Windows 应用程序”,则它不会构建,因为没有入口点。如果我将输出类型设置为“类库”,它会构建,但最终会得到一个我并不真正想要的额外 TEST.DLL 文件。
无论如何可以将输出类型设置为“无”吗?我希望生成操作发生(因此我的 DLL 被复制),但我不希望创建虚拟类程序集。有任何想法吗?
谢谢!
解决方案
以下分步指南的假设:
假设您有一个包含两个项目的解决方案:
Main
: :您的主要(启动)项目。BundledDLLs
: :一个图书馆项目,其中包含.dll
应该最终位于主项目的输出目录中。
分步指南:
在 Visual Studio 中实现目标的最简单方法可能如下:
全部添加
.dll
到BundledDLLs
并设置他们的 复制到输出目录 到 如果较新则复制.这是在 项目浏览器 和 特性 视窗。
配置
BundledDLLs
的输出目录与Main
的输出目录。这可以在 建造 的选项卡
BundledDLL
的 项目属性 页。在中输入类似以下内容 输出路径 文本框:..\Main\bin\Debug
设置
BundledDLLs
作为一个依赖项Main
.不要 添加
BundledDLLs
作为项目参考Main
, ,正如您通常所做的那样;相反,使用 项目依赖关系 对话框到 .这将告诉构建工具,无论何时Main
建成,BundledDLLs
需要先建造。通过右键单击来执行此操作
Main
项目节点打开上下文菜单;选择 项目依赖... 从那里。在现在打开的对话框中,首先选择Main
从下拉列表中;然后检查BundledDLLs
在下面的项目列表中。BundledDLLs
现在已注册为依赖项Main
.附: 其缺点之一是 不是 在中具有显式程序集引用
Main
是某些工具可能无法识别依赖性。例如,ClickOnce 部署可能无法正常工作。添加构建后事件
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分享此提示。
您可以将文件放在解决方案文件夹。您的一个项目可以有一个构建操作来执行复制,但由于它们不在项目中,因此它们不会尝试“构建”。