还没怎么深入.net core开发,之前做的api接口,一直没弄清楚wwwroot什么作用,这两天建设企业网站程序,才发现不管是views中还是根目录下的图片、css文件都无法加载,于是尝试着将这些文件放到wwwroot目录,居然正常显示了。

所以.net core的wwwroot是用于放置程序、配置、数据库外的需要浏览器加载的资源型文件,比如图片、css、js等,引用直接以wwwroot作为根路径即可

简单来说,修改views中的cshtml文档后,必须重新发布站点才能正常使用,否则会提示

System.InvalidOperationException: Cannot find compilation library location for package ‘Microsoft.AspNet.WebApi.Client’

不知道有什么解决办法

解决办法:

修改.csproj文件

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    .........
  </PropertyGroup>
修改为
<PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    .........
    <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
  </PropertyGroup>

经测试,centos nginx 配置后依然无法使用,直接无法显示

.net core 2.2需要自己创建一个json文件,内容

port.json
{
“server.urls”:”http://domain:8000″
}

修改Program.cs的内容,参考前面的文章。

然后配置好nginx的反向代理(apache也是需要配置),将端口8000映射到80,建议安装个宝塔控制面板,在站点配置中很简单就能设置好了。

但是通过宝塔配置的反向代理发送给服务器的是指定的域名,如果需要根据不同访问域名发送给服务器的是不同的域名,就需要将

proxy_set_header Host 你的域名

修改为

proxy_set_header Host $host;

这样子服务器就会将访问过来的域名透传给程序了

.net core 开发用的sqlite数据库,发布后运行提示 No such table :xxxx,问了度娘才知道是因为data source路径错了,找不到数据库,修改为正确的路径即可!

之所以提示找不到数据表而不是提示找不到数据库是因为系统会自动创建一个sqlite数据库,所以是空库,没有表,自然找不到表了。

只能说,部署.net core 运行时的文章基本上说的都是安装sdk版本的,所以研究了2天,百度了大量的文章,终于安装好了。步骤如下:

1、安装nginx环境

2、安装必须的东西,具体我也不知道,命令如下:
yum install libunwind libicu

3、下载runtime,要下载2个,一个是netcore runtime,一个是dotnet core runtime,下载下来后解压并安装:

sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet 
sudo ln -s /opt/dotnet/dotnet /usr/local/bin
sudo tar zxf aspnetcore.tar.gz /opt/dotnet

第一行是建立文件夹并解压缩
第二行是在/usr/local/bin创建一个dotnet的链接,连接到/opt/dotnet/dotnet上,这样子输入 dotnet命令就可以调用到命令了
第三行是将aspnet core runtime解压到netcore runtime目录下

到这里runtime环境算是搭好了,接下来就是创建一个网站,具体可以使用类似宝塔之类(安装完系统就先装个宝塔类的软件,可以快速搭建linux环境和管理网站)的软件来创建。

将visual studio的.net core项目发布,一种是独立部署,一种是依赖框架部署。

两种部署的简单区别如下(个人理解,不保证正确):

1、依赖框架部署,最精简的,相当于只发布了网站程序而已,能不能运行就看平台上支不支持你需要的运行环境了。

2、独立部署:比较臃肿,因为自带自需的运行时框架(但是前提应该是服务器已经安装了上面的基本环境),如果服务器的.net core runtime版本不是你的版本,那么程序还是可以运行的。

因为我安装的是.net core 3.0预览版,发现visual studio 2017只能支持目标框架2.0的所以无法正常发布,只能选择独立部署发布。发布到文件夹,将文件通过ftp上传到网站的根目录。

接下来就是运行网站程序了,输入命令:

dotnet netCoreStudy.dll

其中netCoreStudy我的项目名,发布出来后有一个netCoreStudy.dll

接着就能收到运行的提示了。

可能存在的错误:

1、Unable to bind to http://localhost:5000 on the IPv6 loopback interface.

这个问题好像是不能绑定5000端口,我给换了下端口,参考下图(往上转过来的):

先建立一个文档:port.json,或者你已经了自己配置的文件,增加下面这条内容:

"server.urls": "http://myname.com.cn:8000" 

例如我的port.json文件:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "server.urls": "http://myname.com.cn:8000" 
}

然后编辑program.cs文件,增加config的定义,然后引用config。

PS:内部的directory.getcurrentdirectory()我个人换成了appcontext.basedirectory

2、出现错误:

Error:
 An assembly specified in the application dependencies manifest (ZKEACMS.WebHost.deps.json) was not found:
 package: 'Microsoft.ApplicationInsights.AspNetCore', version: '2.1.1'
 path: 'lib/netstandard1.6/Microsoft.ApplicationInsights.AspNetCore.dll'
 This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
 aspnetcore-store-2.0.0-linux-x64.xml;aspnetcore-store-2.0.0-osx-x64.xml;aspnetcore-store-2.0.0-win7-x64.xml;aspnetcore-store-2.0.0-win7-x86.xml

这个是没有安装aspnet core runtime,参考前面的步骤。

var data = new { keyword1 = new { value =”参数1″ }, keyword2 = new { value = “参数2”} }; //定义模板参数内容
WxJsonResult jresult = Senparc.Weixin.WxOpen.AdvancedAPIs.Template.TemplateApi.SendTemplateMessage(
AppId, openId, templateId, data , formId, returnPage, “需要突出的内容”, “#fff00”);//小程序appid,信息接收人的OpenID,模板消息的ID,模板消息参数数据,formID(通过report-submit表单获取),返回页面路径(如:/pages/home/index),需要突出的内容,突出内容的字体颜色

            PdfSharp.Pdf.PdfDocument doc = new PdfDocument(); //实例化对象
            XImage img= XImage.FromFile(pngPath + "\\" + fileName + ".png"); //获取图片对象
            PdfPage page = doc.AddPage(); //增加1页
            page.Width = 212;
            page.Height = 269; //设置长宽            
            XGraphics g = XGraphics.FromPdfPage(page );
            g.DrawImage(img, 0, 0);

加个循环就可以一直添加新页并把图片写入pdf文件

        

        Bitmap bg = new Bitmap(500,500); //创建一个500x500px的画布
        bg.SetResolution(400, 400); //将画布设置为400x400分辨率
        Graphics g = Graphics.FromImage(bg); //新建画图对象
        g.Clear(Color.Transparent); //设置画图背景透明
        //将imgFile(通过FileDialog获取到的对象)画入画布并居中
        g.DrawImage(imgFile, (bg.Width - imgFile.Width) / 2, (bg.Height - imgFile.Height) / 2); //第二和三参数是置入图片在画布上的起始X和Y位置

 
        //设置文字
        System.Drawing.Font font = new System.Drawing.Font("思源黑体 CN", 12, FontStyle.Bold);  //设置字体
        SolidBrush brush = new SolidBrush(Color.White); //设置笔刷(写文字用)
        g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;//我选择这项,可以让写出来的文字没有黑边毛刺
        //写入文字
        g.DrawString(str, font, brush, xPosition, yPosition); //参数分别为写入的文字内容,字体,笔刷,x位置,y位置
        bg.Save(pngPath+"\\"+ no + ".png",ImageFormat.Png); //保存,参数分别为保存文件路径,图片格式
        brush.Dispose();
        font.Dispose();
        g.Dispose();
        img.Dispose();
        bg.Dispose();

说难也不难,希望对各位有用