我有一个名为'X‘的C#项目,我修改了X.csproj文件,并将<OutputType>Library</OutputType>更改为<OutputType>Module</OutputType> --这意味着我现在输出的是.netmodule文件,而不是.dll文件,这很酷,我可以使用netmodules作为C++/CLI项目的输入。
但是,Visual坚持在每个构建中重新编译该项目,当我将构建输出详细化为“诊断”时,我会在输出中看到以下一行:
项目“X”不是最新的。缺少输出文件‘C:\X\bin\Debug\X.exe’。
当然,问题是编译器输出的是X.netmodule,而不是X.exe,因此永远找不到X.exe,因此我的项目在每次构建时都会重新编译。更糟糕的是,如果我从csproj上的命令行运行msbuild,则会发生正确的行为,即只有在项目中的文件发生更改时才进行重新构建。
这使我相信,VS2015或其他人正在错误地计算最终输出名称,因为我为<OutputType>指定了模块,而且它是VS2015强制重新构建的,而不是Msbuild。
我知道修改<OutputType> of .csproj是不标准的,不受支持,但似乎其他人正在使用这种方法,这似乎是一个已知的问题,可能是一个解决办法。
提前谢谢。
发布于 2016-01-21 05:30:48
好吧,我很想听听其他对这件事有洞察力的人的意见,但我想出了一个解决办法。我只是在Properties>Build事件>构建后事件命令行中添加了一个复制命令。
复制$(TargetDir)$(TargetName).netmodule $(TargetDir)$(TargetName).exe
这意味着当VS查找exe (而不是.netmodule)时,它会找到它,并且它与.netmodule有相同的日期,因此VS关于是否重新构建的逻辑应该得到纠正。
https://stackoverflow.com/questions/34915774
复制相似问题