Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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# 为什么可以';t MSBuild解析程序集版本更改_C#_Visual Studio 2010_Msbuild - Fatal编程技术网

C# 为什么可以';t MSBuild解析程序集版本更改

C# 为什么可以';t MSBuild解析程序集版本更改,c#,visual-studio-2010,msbuild,C#,Visual Studio 2010,Msbuild,我的问题似乎相对简单。我在VS2010中创建了一个c#解决方案,其中包含几个项目,这些项目的项目引用配置适当。我在构建机器上使用了MSBuild,它运行良好,以正确的顺序增量构建以提高效率。但是,如果扩展接口(添加公共属性等)并增加其他项目所依赖的其中一个项目的AssemblyVersion,则MSBuild似乎无法刷新下游依赖项上的缓存,并引发一个错误,即找不到已更改dll的早期版本。有趣的是,如果我立即再次运行构建,它会告诉我输出没有改变,并且完成构建时没有错误,但是我不再相信它做了正确的事

我的问题似乎相对简单。我在VS2010中创建了一个c#解决方案,其中包含几个项目,这些项目的项目引用配置适当。我在构建机器上使用了MSBuild,它运行良好,以正确的顺序增量构建以提高效率。但是,如果扩展接口(添加公共属性等)并增加其他项目所依赖的其中一个项目的AssemblyVersion,则MSBuild似乎无法刷新下游依赖项上的缓存,并引发一个错误,即找不到已更改dll的早期版本。有趣的是,如果我立即再次运行构建,它会告诉我输出没有改变,并且完成构建时没有错误,但是我不再相信它做了正确的事情

有一个文件“ResolveAssemblyReference.cache”似乎保存着旧的引用,如果我在每次生成之前从obj/x86/Release文件夹中删除此文件,我将不会收到任何错误,但不知道是否已经/应该重新生成输出

我想了解为什么MSBuild会遇到这种情况,为什么在第二次构建中,它似乎报告第一次构建确实有效,并且目标是最新的

在我了解发生了什么之前,我必须始终强制重建整个解决方案,以确保我有兼容的文件

顺便说一句,如果我在VS2010中构建,我似乎从来没有遇到过这种情况,因为我怀疑它会适当地更新缓存每个构建

更新:


我发现在MSBuild的命令行中使用“OutDir”似乎是罪魁祸首。如果我删除这个,那么引用似乎得到了适当的解决。但是现在我没有将输出复制到部署所需的位置…

扩展接口是什么意思?您的意思是已将属性添加到msbuild脚本或项目文件中?您可以发布一个如何增加AssemblyVersion的示例吗?我的意思是,例如,向项目中定义的一个类添加公共属性,并修改该项目的AssemblyInfo.cs中的AssemblyVersion属性。这样[assembly:AssemblyVersion(“4.3.0.0”)]就变成了[assembly:AssemblyVersion(“4.4.0.0”)]