2018-9-29-Roslyn-通过-Nuget-引用源代码-在-VS-智能提示正常但是无法编译
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
Roslyn 通过 Nuget 引用源代码 在 VS 智能提示正常但是无法编译
|
lindexi
|
2018-09-29 12:58:16 +0800
|
2018-09-29 12:47:45 +0800
|
Roslyn MSBuild 编译器
|
本文告诉大家如果在 Nuget 引用源代码的方式引用源代码,在 VisualStudio 的智能提示和 Resharper 的智能提示都能找到对应的类,但是在 VisualStudio 编译或使用命令行 msbuild 编译时提示找不到类
这个问题是 msbuild 的一个坑,主要是没有主动引用 .nuget.g.props 和 .nuget.g.targets 文件,使用 Microsoft.NET.Sdk 作为 Sdk 的项目文件会自动在 obj 文件夹下生成 project.assets.json、$(ProjectName).csproj.nuget.cache、$(ProjectName).csproj.nuget.g.props 和 $(ProjectName).csproj.nuget.g.targets 文件;其中 .nuget.g.props 和 .nuget.g.targets 中生成了 Import 包中编译相关文件的代码。具体请看MSBuild/Roslyn 和 NuGet 的 100 个坑 - walterlv
但是在使用 Nuget 引用源代码的时候,因为此时源代码还没加入到编译,在编译的时候 msbuild 找不到类,于是就没继续执行,只是就无法编译通过
在我的项目编译出现下面的提示
“C:\lindexi\github\SopisatraJowje\SopisatraJowje\SopisatraJowje.csproj”(默认目标) (1) ->
“C:\lindexi\github\SopisatraJowje\SopisatraJowje\SopisatraJowje.csproj”(Build 目标) (1:2) ->
“C:\lindexi\github\SopisatraJowje\SopisatraJowje\SopisatraJowje_rb00pftp_wpftmp.csproj”(_CompileTemporaryAssembly 目标) (
2) ->
(CoreCompile 目标) ->
MainWindow.xaml.cs(15,12): error CS0234: 命名空间“lindexi”中不存在类型或命名空间名“Doubi”(是否缺少程序集引用?) [C:\lindexi\github\SopisatraJowj
e\SopisatraJowje\SopisatraJowje_rb00pftp_wpftmp.csproj]
简单的解决方法是在 csproj 添加引用 .nuget.g.props 两个文件,引用的方式是在<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0"> 的下一句引用 .nuget.g.props 例如我创建了项目是 SopisatraJowje 我可以使用下面的方式引用
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<Import Project="obj\SopisatraJowje.csproj.nuget.g.props"></Import> <!-- 下面是原来的内容 -->
<PropertyGroup>
<LanguageTargets>$(MSBuildToolsPath)\Microsoft.CSharp.targets</LanguageTargets>
<TargetFrameworks>net45;</TargetFrameworks>
<OutputType>WinExe</OutputType>
</PropertyGroup>
在文件的最后再添加引用 nuget.g.targets 文件的最后需要在 </Project> 上一个
<Import Project="obj\SopisatraJowje.csproj.nuget.g.targets"></Import>
</Project>
也就是文件看起来是这样
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<Import Project="obj\SopisatraJowje.csproj.nuget.g.props"></Import>
<PropertyGroup>
<LanguageTargets>$(MSBuildToolsPath)\Microsoft.CSharp.targets</LanguageTargets>
<TargetFrameworks>net45;</TargetFrameworks>
<OutputType>WinExe</OutputType>
</PropertyGroup>
<Import Project="obj\SopisatraJowje.csproj.nuget.g.targets"></Import>
</Project>
添加了这两个引用就可以解决源代码引用的时候出现了在 VisualStudio 可以跳转找到类,但是在编译的时候找不到类的问题
MSBuild/Roslyn 和 NuGet 的 100 个坑 - walterlv
2018-9-29-Roslyn-通过-Nuget-引用源代码-在-VS-智能提示正常但是无法编译的更多相关文章
- 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
mvc项目中,解决用Url.Content方法引用jquery文件后智能提示失效的办法 这个标题不知道要怎么写才好, 但是希望文章的内容对大家有帮助. 场景如下: 我们在用开发开发程序的时候,经常 ...
- 记2018/4/29 qbxt 测试
记 2018/4/29 qbxt 测试(提高基础班) 简单的 NOIP 模拟赛 竞赛时间: 2018 年 4 月 29 日 13:30-17:00 题目名称 乘法 求和 计数 输入文件名 mul.i ...
- 在VS2015中增加JQuery引用及智能提示
打开VS2015,从"工具"菜单选择NuGet选项,搜索Jquery,并点击安装. 可以看到解决方案的scripts增加了对应文件的引用 在HTML文件中可以直接引用j ...
- C++ 引用计数技术及智能指针的简单实现
一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧).最近花了点时间认真看了智能指针,特地来写这篇文章. 1.智能指针是什么 简单来说,智能指针是一个类,它对普 ...
- vs2015web工程中的html引用压缩后css后无法智能提示的问题解决
环境:win10x64 vs2015企业版 项目:空白web项目(.net framework4) 问题:html页面加入压缩后的css(eg:bootstrap.min.css),编码的时候无法智能 ...
- Android源代码因删除所有git仓库导致的编译错误
/******************************************************************************** * Android源代码因删除所有g ...
- 2018.09.29 Lua
转自:https://zybuluo.com/lisaisacat/note/636399 谢谢 Lua 基础简明教程 脚本开发 目录 Lua 基础简明教程 目录 注释 Lua 编程 语句块 赋 ...
- spring ,springmvc,mybatis 最基本的整合,没有多余的jar包和依赖 2018.9.29日
最基本的ssm框架整合 本案例采用2018商业版intellij idea 编辑器 maven项目管理工具 tomcat8.5 接着上一篇使用springmvc最基本配置开始 https: ...
- 2018/6/29 关于hashmap的总结
hashMap和ConcurrentHashMap的区别 hashMap内部具体如何实现的 如果hashMap的key是一个自定义的类,怎么办 为什么重写equals还要重写hashcode 一.什么 ...
随机推荐
- 与DSP通信时,RD&WR信号
/////////////////////////////////////////////////////////// :] rd,wr; :] dsp_data_out; 'hzzzz; // ...
- 拾遗:关于“尾递归”- tail recursion
定义[个人理解]: 尾递归,即是将外层得出的常量计算因子,以函数参数的形式逐层向内传递,即内层调用整合外层调用的产出,整个递归的结果最终由最内层的一次函数调用得出:而通常的递归则是外层调用阻塞.等待内 ...
- 将本地已有的一个项目上传到新建的git仓库的方法
将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种. 一. 克隆+拷贝 第一种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去.然后push到远程仓库上去即 ...
- 常用内置模块(四)——subprocess、re
常用模块(四) 一.subprocess模块 1.subprocess为子流程模块,用于执行系统命令,该模块在Python全栈开发中不常用 2.常用方法 run 返回一个表示执行结果的对象 call ...
- CSS:Stacking Context
通常情况下,HTML页面可以被认为是二维的,因为文本,图像和其他元素被排列在页面上而不重叠.在这种情况下,只有一个渲染进程,所有元素都知道其他元素所占用的空间.z-index属性可让你在渲染内容时调整 ...
- 用Cython加速Python代码
安装Cython pip install Cython 如何使用 要在我们的笔记本中使用Cython,我们将使用IPython magic命令.Magic命令以百分号开始,并提供一些额外的功能,这些功 ...
- 8-MySQL-Ubuntu-数据表中数据的增加(一)
增(insert) (1)全部字段插入数据:按表中字段顺序增加数据 注:(1)主键字段可以使用0/null/default来占位.(2)gender字段中数据类型是枚举,可以使用索引数字1,2,3,4 ...
- 「SNOI2019」通信 分治优化费用流建图
题意: n 个排成一列的哨站要进行通信.第 i 个哨站的频段为 ai. 每个哨站 ii 需要选择以下二者之一: 1.直接连接到控制中心,代价为 W:2.连接到前面的某个哨站 j(j<i),代价为 ...
- Android开发 MediaPlayer入门_播放本地视频
前言 MediaPlayer,可以播放视频/音频,并且它支持本地和网络文件的播放.本片博客作为入门教程,先以最通俗的方式解释播放文件本地视频.(如果你嫌MediaPlayer还是太麻烦可以试试选择Vi ...
- 通过statCounter计算给定的RDD[Double]的统计信息的方法
需求1:给定一个RDD[Double],进行计算,该RDD的统计信息(count,mean,stdev,max,min) 代码: def main(args: Array[String]): Unit ...