WCF C#项目未引用Newtonsoft.Json.dll,构建服务器为何自动复制该文件?
排查WCF项目自动复制Newtonsoft.Json.dll的问题
这种情况我之前维护.NET Framework项目时碰到过好几次,结合你给出的构建日志(文件来自Blend目录),大概率是下面这些隐藏的引用或构建规则导致的,你可以逐一排查:
1. 间接依赖的组件悄悄带了引用
你自己没直接引入Newtonsoft.Json,但项目里引用的其他类库、NuGet包(比如某些WCF扩展组件、第三方工具类)可能本身依赖这个DLL。你可以:
- 右键项目 → 管理NuGet程序包 → 切换到“已安装”标签,查看每个包的依赖项,看看有没有哪个包间接引用了Newtonsoft.Json;
- 或者在VS的“解决方案资源管理器”里,展开项目的“引用”节点,右键选择“查看依赖项”,逐层检查引用链。
2. Blend设计时组件在搞事情
日志里明确显示文件来自VS2013(路径里的12.0对应VS2013)的Blend目录,这说明是设计时支持组件触发的复制。可能你的项目里有Blend相关的设计器文件(比如XAML、Blend专属的可视化配置文件),VS构建时会自动复制设计时需要的DLL到输出目录,哪怕你没手动引用。你可以:
- 打开项目的
.csproj文件,搜索Blend关键词,看看有没有类似<Import Project="...Blend..." />的配置,或者和设计时支持相关的条目; - 尝试在项目属性的“生成”选项卡里,关闭一些非必要的设计时支持选项(注意:WCF项目可能依赖部分设计器,操作前最好备份项目文件)。
3. 构建服务器的全局环境影响
构建服务器上的VS 2013可能在Blend目录预装了Newtonsoft.Json.dll,而你的项目在构建过程中,某个MSBuild任务自动从这个全局路径复制了文件。你可以:
- 临时在构建服务器上重命名
d:\Microsoft Visual Studio 12.0\blend\newtonsoft.json.dll,然后重新构建项目,如果构建报错或者不再复制这个DLL,就能确认是Blend目录的文件导致的; - 也可以检查构建服务器的GAC(全局程序集缓存)里有没有Newtonsoft.Json,不过从路径看更可能是Blend目录的本地文件。
4. MSBuild隐式复制规则触发
有时候MSBuild会根据项目中的某些文件(比如配置文件、XAML里的类型引用)自动复制相关依赖DLL。你可以:
- 在构建服务器上启用MSBuild详细日志(添加
/v:detailed参数),查看具体是哪个MSBuild任务触发了这个复制操作,定位到根因; - 打开
.csproj文件,搜索Newtonsoft.Json,看看有没有隐藏的<CopyLocal>true</CopyLocal>配置,或者相关的<ItemGroup>条目。
快速排查步骤建议
- 先在本地VS启用详细构建日志,对比本地和构建服务器的日志差异,看本地是否也会复制这个DLL;
- 检查所有NuGet包的依赖链,找出间接引用的源头;
- 验证Blend目录文件的影响,确认后再考虑是否移除或替换这个全局文件。
内容的提问来源于stack exchange,提问作者san
相关产品推荐
相关产品推荐

