1

我有一个名为“X”的 C# 项目,我修改了 X.csproj 文件,并更改<OutputType>Library</OutputType><OutputType>Module</OutputType> 这意味着我现在正在输出 .netmodule 文件而不是 .dll 文件,这很酷,我可以使用 netmodules 作为 C++ 的输入/CLI 项目。

但是,Visual Studio 坚持在每次构建时重新编译项目,当我将构建输出详细程度设置为“诊断”时,我在输出中看到了这一行:

项目“X”不是最新的。缺少输出文件“C:...\X\bin\Debug\X.exe”。

当然,问题在于编译器输出的是 X.netmodule,而不是 X.exe,因此永远找不到 X.exe,因此我的项目在每次构建时都重新编译。更糟糕的是,如果我从 csproj 上的命令行运行 msbuild,则会出现正确的行为,即它仅在项目中的文件发生更改时才重新构建。

这使我相信 VS2015 [或其他] 正在错误地计算最终输出名称,因为我已经为 指定了 Module <OutputType>,并且是 VS2015 强制重新构建,而不是 Msbuild。

我知道修改<OutputType>.csproj 是非标准的,并且不受支持,但似乎其他人正在使用这种方法,而且这似乎是一个已知问题,可能需要解决方法。

提前致谢。

4

1 回答 1

1

好的,我很想听听其他对此有深入了解的人的意见,但我确实想出了一个解决方法。我只是在 Properties>Build Events>Post-build event 命令行中添加了一个复制命令。

复制 $(TargetDir)$(TargetName).netmodule $(TargetDir)$(TargetName).exe

这意味着当 VS 查找 exe(而不是 .netmodule)时,它会找到它,并且它与 .netmodule 具有相同的日期,因此应该更正 VS 关于是否重新构建的逻辑。

于 2016-01-21T05:30:48.773 回答