Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将跳过CoreCompile。我希望它发生_C#_Msbuild - Fatal编程技术网

C# 将跳过CoreCompile。我希望它发生

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#文件。我下载它,然后在命令行中使用此命令构建解决方案文件

“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)。当我从存储库中删除文件夹时,开始工作。谢谢你的信息,马丁。:)