Browse Source

nuget包引用迁移到项目中,编译时只能编译其中一种版本,清空后才可以编译另一种

pull/5/head
大石头 7 years ago
parent
commit
401e99e6f3
  1. 1
      .gitignore
  2. 9
      NewLife.Net/NewLife.Net.csproj
  3. 9
      NewLife.Net/NewLife.Net40.csproj
  4. 4
      NewLife.Net/packages.config
  5. 2
      NewLife.Net/发布NuGet.cs
  6. 188
      发布NuGet.cs

1
.gitignore

@ -21,3 +21,4 @@ bld/
*.htm
*.nuspec
*.nupkg
/MigrationBackup

9
NewLife.Net/NewLife.Net.csproj

@ -34,9 +34,6 @@
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="NewLife.Core, Version=7.0.6712.2419, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NewLife.Core.7.0.6712.2419\lib\net45\NewLife.Core.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
@ -256,7 +253,6 @@
<EmbeddedResource Include="App.config">
<SubType>Designer</SubType>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="SNTP\SNTPClient.cs" />
<None Include="TDP\TDP.pdf" />
<None Include="架构设计\网络模型.cd" />
@ -270,6 +266,11 @@
<Content Include="架构设计\NewLife_TCP状态变迁.jpg" />
<Content Include="架构设计\NewLife_UdpServer.jpg" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Core">
<Version>7.0.6712.2419</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

9
NewLife.Net/NewLife.Net40.csproj

@ -33,9 +33,6 @@
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="NewLife.Core, Version=7.0.6712.2447, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NewLife.Core.7.0.6712.2419\lib\net40\NewLife.Core.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
@ -255,7 +252,6 @@
<EmbeddedResource Include="App.config">
<SubType>Designer</SubType>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="SNTP\SNTPClient.cs" />
<None Include="TDP\TDP.pdf" />
<None Include="架构设计\网络模型.cd" />
@ -269,6 +265,11 @@
<Content Include="架构设计\NewLife_TCP状态变迁.jpg" />
<Content Include="架构设计\NewLife_UdpServer.jpg" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Core">
<Version>7.0.6712.2419</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

4
NewLife.Net/packages.config

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NewLife.Core" version="7.0.6712.2419" targetFramework="net40" />
</packages>

2
NewLife.Net/发布NuGet.cs

@ -1 +1 @@
//include=..\..\Src\发布NuGet.cs
//include=..\发布NuGet.cs

188
发布NuGet.cs

@ -0,0 +1,188 @@
//assembly=..\Src\DLL\NuGet.exe
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Serialization;
using NewLife.Log;
using NewLife.Xml;
using NuGet;
namespace NewLife.Reflection
{
public class ScriptEngine
{
static void Main()
{
//PathHelper.BaseDirectory = @"E:\X\Src\NewLife.Cube";
XTrace.Debug = true;
XTrace.UseConsole();
// 查找NuGet.exe
var ng = "..\\..\\Src\\DLL\\NuGet.exe".GetFullPath();
//"cmd".Run("/c del *.nuspec /f/q");
foreach(var item in ".".AsDirectory().GetAllFiles("*.nuspec"))
{
Console.WriteLine("删除 {0}", item);
item.Delete();
}
// 找到名称
var proj = ".".AsDirectory().FullName.EnsureEnd("\\");
Console.WriteLine("proj项目:{0}", proj);
string[] pathsplit = proj.Split("\\");
var name = pathsplit[pathsplit.Count() - 1];
Console.WriteLine("项目:{0}", name);
proj = name + ".csproj";
var spec = name + ".nuspec";
var specFile = spec.GetFullPath();
if (!File.Exists(specFile))
{
var tar = "..\\..\\Bin\\" + name + ".dll";
tar = tar.GetFullPath();
if (!File.Exists(tar))
{
tar = "..\\..\\Bin4\\" + name + ".exe";
tar = tar.GetFullPath();
}
if (!File.Exists(tar))
{
tar = "..\\..\\XCoder\\" + name + ".exe";
tar = tar.GetFullPath();
}
if (!File.Exists(tar))
{
Console.WriteLine("只能找项目文件了,总得做点啥不是");
//编译当前工程
"msbuild".Run(proj + " /t:Rebuild /p:Configuration=Release /p:VisualStudioVersion=15.0 /noconlog /nologo", 8000);
//"NuGet".Run("spec -f -a " + name, 5000);
return;
}
Console.WriteLine("目标 {0}", tar);
ng.Run("spec -Force -a " + tar, 5000);
/*var sCmd = new NuGet.CommandLine.SpecCommand();
sCmd.Force = true;
sCmd.AssemblyPath = tar;
sCmd.ExecuteCommand();*/
var spec2 = ".".AsDirectory().GetAllFiles(spec).First().Name;
if (!spec.EqualIgnoreCase(spec2)) File.Move(spec2, spec);
}
// 部分项目加上前缀
var name2 = name.EnsureStart("NewLife.");
var ms = new MemoryStream(File.ReadAllBytes(specFile));
var cfg = Manifest.ReadFrom(ms, false);
// 修改配置文件
cfg.Metadata.Id = name2;
cfg.Metadata.LicenseUrl = "http://www.NewLifeX.com";
cfg.Metadata.ProjectUrl = "https://github.com/NewLifeX";
cfg.Metadata.IconUrl = "http://www.NewLifeX.com/favicon.ico";
cfg.Metadata.Copyright = "Copyright 2002-{0} 新生命开发团队 http://www.NewLifeX.com".F(DateTime.Now.Year);
cfg.Metadata.Tags = "新生命团队 X组件 NewLife " + name;
cfg.Metadata.ReleaseNotes = "https://github.com/NewLifeX";
//cfg.Metadata.Authors="新生命开发团队";
//cfg.Metadata.Owners="新生命开发团队";
/*var rep = new RepositoryMetadata();
rep.Type = "git";
rep.Url = "https://github.com/NewLifeX/X.git";
cfg.Metadata.Repository = rep;*/
// 清空依赖
var dgs = cfg.Metadata?.DependencySets;
dgs?.Clear();
//var dgs = cfg.Metadata.DependencyGroups;
//dps.RemoveAll(e => e.Id == "SampleDependency");
//var fx = new NuGet.Frameworks.NuGet.Frameworks1094018.NuGetFramework(".NETFramework4.5");
//var dg = new PackageDependencyGroup(fx, new PackageDependency[0]);
//dgs.Add(dk);
// 自动添加所有文件
if (cfg.Files == null) cfg.Files = new List<ManifestFile>();
cfg.Files.Clear();
if (cfg.Files.Count == 0)
{
AddFile(cfg, name, "dll;xml;pdb;exe", @"..\..\Bin", @"lib\net45");
AddFile(cfg, name, "dll;xml;pdb;exe", @"..\..\Bin2", @"lib\net20");
AddFile(cfg, name, "dll;xml;pdb;exe", @"..\..\Bin4", @"lib\net40");
AddFile(cfg, name, "dll;xml;pdb;exe", @"..\..\Bin\netstandard2.0", @"lib\netstandard2.0");
if (name == "XCode") AddFile(cfg, null, "*.ps1", @"tools", @"tools");
}
ms = new MemoryStream();
cfg.Save(ms);
File.WriteAllBytes(specFile, ms.ToArray());
//var pack = "pack {0} -IncludeReferencedProjects -Build -Prop Configuration={1} -Exclude **\\*.txt;**\\*.png;content\\*.xml";
// *\\*.*干掉下级的所有文件
var pack = "pack {0} -IncludeReferencedProjects -Exclude **\\*.txt;**\\*.png;*.jpg";
Console.WriteLine("打包:{0}", proj);
//"cmd".Run("/c del *.nupkg /f/q");
foreach(var item in ".".AsDirectory().GetAllFiles("*.nupkg"))
{
Console.WriteLine("删除 {0}", item);
item.Delete();
}
ng.Run(pack.F(proj), 30000);
var fi = ".".AsDirectory().GetAllFiles("*.nupkg").FirstOrDefault();
if (fi != null)
{
var nupkg = fi.Name;
Console.WriteLine("发布:{0}", nupkg);
ng.Run("push {0} {1} -Source https://www.nuget.org -Verbosity detailed".F(nupkg, File.ReadAllText("..\\..\\nuget.key")), 30000);
}
}
//static ManifestDependency _md;
static void AddFile(Manifest cfg, String name, String exts, String src, String target)
{
if (!name.IsNullOrEmpty()) exts = exts.Split(";").Select(e=>name + "." + e).Join(";");
var fs = src.AsDirectory().GetAllFiles(exts).ToList();
//XTrace.WriteLine("目录:{0} 文件:{1}", src.AsDirectory().FullName, fs.Count);
if(fs.Count == 0) return;
var dgs = cfg.Metadata?.DependencySets;
var dg = new ManifestDependencySet();
switch(target.Substring(@"\"))
{
case "net20": dg.TargetFramework = ".NETFramework2.0"; break;
case "net40": dg.TargetFramework = ".NETFramework4.0"; break;
case "net45": dg.TargetFramework = ".NETFramework4.5"; break;
case "netstandard2.0": dg.TargetFramework = ".NETStandard2.0"; break;
}
dg.Dependencies = new List<ManifestDependency>();
/*if(_md == null)
{
var md = new ManifestDependency();
md.Id = "NewLife.Core";
md.Version = "7.0.6706.20578";
md.Exclude = "Build,Analyzers";
_md = md;
dg.Dependencies.Add(md);
}*/
if(!dg.TargetFramework.IsNullOrEmpty()) dgs.Add(dg);
XTrace.WriteLine("目录:{0} 框架:{1} 文件:{2}", src, dg.TargetFramework, fs.Count);
foreach(var item in fs)
{
var mf = new ManifestFile();
mf.Source = item.FullName;
mf.Target = @"{0}\{1}".F(target, item.Name);
cfg.Files.Add(mf);
}
}
}
}
Loading…
Cancel
Save