C# 将跳过CoreCompile。我希望它发生
我的设想是,我有一组源代码受控的c#文件。我下载它,然后在命令行中使用此命令构建解决方案文件C# 将跳过CoreCompile。我希望它发生,c#,msbuild,C#,Msbuild,我的设想是,我有一组源代码受控的c#文件。我下载它,然后在命令行中使用此命令构建解决方案文件 “C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe”MyProj.sln/property:Platform=x64 但是当我这样做的时候,CoreCompile被跳过,说“跳过目标”CoreCompile,因为所有输出文件相对于输入文件都是最新的。”问题是,它生成的dll不包含.cs文件中的许多更改 当我在.cs文件中做一个小的更改
“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe”MyProj.sln/property:Platform=x64
但是当我这样做的时候,CoreCompile被跳过,说“跳过目标”CoreCompile,因为所有输出文件相对于输入文件都是最新的。”问题是,它生成的dll不包含.cs文件中的许多更改
当我在.cs文件中做一个小的更改(例如,放置一个日志)时,它就构建得很好,生成的dll包含了所有更改
但是,32位版本在第一次构建时不会跳过CoreCompile本身。(相同的命令,但带有/property:Platform=x86
)
我无法理解这种行为。请帮忙。谢谢。MSBuild可以。它通过检测每个目标之间输入文件的更改和缺少的输出文件来实现。如果您更新了存储库,但未对.cs
文件进行任何更改,则应跳过CoreCompile
。您可以查找最新roslyn版本的输入和输出
您可以使用/t:Rebuild
(与“/t:clean;build”
)强制执行干净的生成
还要注意,通过/p:name=value
传递的参数的更改通常不会影响构建。增量构建逻辑基于文件更改,而不是值。如果影响输出目录的参数发生更改,则认为输出丢失。如果只有影响某些编译设置的参数更改,它可能会触发增量生成的目标。这些类型的设置通常在项目中设置,这将导致对$(MSBuildAllProjects)
的更改,这通常是增量目标的输入
例如,在.NET Core中设置
/p:Version=1.2.3
或/p:VersionSuffix=beta1
时,不会影响增量生成。请注意,.NET framework(版本4.*)中包含的msbuild版本非常旧。新版本是VS的一部分,也可以使用构建工具installerHey martin使用,/t:Rebuild
在我的例子中起作用。但是,32位构建的CoreCompile完成了,而64位构建的CoreCompile完成了,这种奇怪行为的原因可能是什么呢?答案是:Platform
在通过命令行传递CoreCompile时,不一定会更改它的输入。我将GitHub的一个问题与我最近处理的一个增量构建问题联系起来,该问题也遇到了类似的问题(命令行参数不影响构建),这可能是一篇有趣的文章。谢谢Martin。但是,我仍然无法理解这种行为/t:重建
或/t:清洁;构建
从第二次开始工作。当第一次执行时,它只是说“跳过corecompile……”。但这两次执行之间没有任何变化。有没有办法让它在第一次发生?由于我们的构建过程只执行此命令一次。因此,即使与/t:Rebuild
一起使用,CoreCompile也会从存储库的“新克隆”中跳过?听起来不对。您需要将csproj文件张贴到某个地方才能获得回购协议。还应使用VS/Build工具中包含的msbuild版本。版本“4”已经7岁了。嘿,兄弟。。问题解决了。我将输出bin文件夹(\bin\debug\x64*)也放入了存储库中。因此,较新的文件不是在生成过程中生成的(使用msbuild)。当我从存储库中删除文件夹时,开始工作。谢谢你的信息,马丁。:)