Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 是否可以强制MSBuild只生成一次项目,而不考虑属性?_C#_.net_Msbuild - Fatal编程技术网

C# 是否可以强制MSBuild只生成一次项目,而不考虑属性?

C# 是否可以强制MSBuild只生成一次项目,而不考虑属性?,c#,.net,msbuild,C#,.net,Msbuild,我目前正在将一个大型解决方案从旧的csproj文件格式迁移到新的csproj格式。我一次只做几个项目,所以我有一个混合的环境,一些项目使用旧的项目文件格式,一些项目使用新的项目文件格式 我已经开始注意到一些构建失败,因为文件正在使用中。我的理论(基于)是,MSBuild生成某些项目两次,因为属性不同(即新的项目文件格式指定TargetFramework属性,而旧项目不指定) 似乎存在并发问题的项目是由其他项目引用的项目,其中引用的项目在项目文件格式之间分割 我用于生成项目的命令是: msbuil

我目前正在将一个大型解决方案从旧的
csproj
文件格式迁移到新的
csproj
格式。我一次只做几个项目,所以我有一个混合的环境,一些项目使用旧的项目文件格式,一些项目使用新的项目文件格式

我已经开始注意到一些构建失败,因为文件正在使用中。我的理论(基于)是,MSBuild生成某些项目两次,因为属性不同(即新的项目文件格式指定
TargetFramework
属性,而旧项目不指定)

似乎存在并发问题的项目是由其他项目引用的项目,其中引用的项目在项目文件格式之间分割

我用于生成项目的命令是:

msbuild.exe /maxcpucount:6 /property:Configuration=Debug;Platform=x64 /t:Rebuild my.sln
在我能够将解决方案中的所有项目转换为新的项目文件格式之前,是否有方法指示MSBuild只生成给定项目一次(不考虑属性)

注意,单线程的构建确实会纠正并发问题,但这会大大减慢构建的速度,并且项目仍然被多次构建。

< P>这是一个MSBube,它引用了多目标项目中的C++ CLI项目。看来他们正在解决这个问题

要解决该错误,可以使用
GlobalPropertiesToRemove
属性从引用中删除该属性:

<ProjectReference Include="..\B.CppCLILibrary\B.CppCLILibrary.vcxproj" GlobalPropertiesToRemove="TargetFramework" />

由于我们无法访问您的代码,因此只有您才能正确解决此问题。但通常,MSBuild和所有生成系统都在生成“目标”只处理一次的规则下运行。不管有多少项目涉及它

构建系统应该为用户提供语言来指定不同“目标”之间的依赖关系。然后由构建系统来确定以何种顺序构建这些东西。(即称为拓扑排序)。从制作最独立的目标开始,一直到制作最不独立的目标

如果某个东西建造了两次,可能是: 1.构建系统中的错误。 2.用户强制项目生成两次

不管怎样,很高兴你把事情解决了