从同一解决方案中的项目调用另一个项目的控制器(.NET Core)
Calling Another Project's Controller From A Project In The Same Solution (.NET Core )
同一个解决方案中有 2 个项目。第一个项目是一个 .NET Core 项目,它具有与包相关的所有代码(控制器、模型等)。我需要获取包的信息(id、名称、描述)并将其显示在第二个项目(.NET Core Web App with Razor)中。是否可以在不更改第一个项目的情况下进行?我只想在单个网页上显示包列表。
我尝试调用第一个项目的控制器,但没有成功。也许我错过了一点。感谢您的帮助。
这个需求是可以实现的,请看下面的gif图
提示
如果你想从同一个解决方案中的一个项目中调用另一个项目的控制器,你需要确保在两个项目中都有HomeController。我的意思是任何 class 的名称在两个项目中都应该是唯一的。
不然你会遇到和我主页一样的问题
测试代码:
public List<PackageReference> GetPackageList5(string projectname)
{
List<PackageReference> list = new List<PackageReference>();
PackageReference p = null;
XDocument doc = XDocument.Load(_webHostEnvironment.ContentRootPath+ "/"+ projectname + ".csproj");
var packageReferences = doc.XPathSelectElements("//PackageReference")
.Select(pr => new PackageReference
{
Include = pr.Attribute("Include").Value,
Version = pr.Attribute("Version").Value
});
Console.WriteLine($"Project file contains {packageReferences.Count()} package references:");
foreach (var packageReference in packageReferences)
{
p = new PackageReference();
p.Version= packageReference.Version;
p.Include= packageReference.Include;
list.Add(packageReference);
//Console.WriteLine($"{packageReference.Include}, version {packageReference.Version}");
}
return list;
}
我的测试步骤:
创建两个项目,Net5MVC
,Net6MVC
添加项目引用。
我的 .net6 项目引用了一个 .net5 项目。所以在我的 HomeController (.net) 中,我在下面添加:
using Net5MVC.ForCore6;
using Net5MVC.Models;
建议
我们在.net6项目中引用.net5项目时,可以构建成功,但是部署时,总是失败。原因是某些文件是 multiple publish output files with the same relative path
.
Found multiple publish output files with the same relative path:
D:\..\Net6\Net6\Net5MVC\appsettings.Development.json,
D:\..\Net6\Net6\Net6MVC\appsettings.Development.json,
D:\..\Net6\Net6\Net5MVC\appsettings.json,
D:\..\Net6\Net6\Net6MVC\appsettings.json.
并且通常会将class库添加到当前项目,而不是添加web项目。
我们知道可以在 .csproj 文件中找到包信息,因此我们需要将 .csproj 文件复制并粘贴到发布文件夹。
我还是推荐使用上面的GetPackageList5方法作为你项目的接口,请求使用HttpClient
同一个解决方案中有 2 个项目。第一个项目是一个 .NET Core 项目,它具有与包相关的所有代码(控制器、模型等)。我需要获取包的信息(id、名称、描述)并将其显示在第二个项目(.NET Core Web App with Razor)中。是否可以在不更改第一个项目的情况下进行?我只想在单个网页上显示包列表。 我尝试调用第一个项目的控制器,但没有成功。也许我错过了一点。感谢您的帮助。
这个需求是可以实现的,请看下面的gif图
提示
如果你想从同一个解决方案中的一个项目中调用另一个项目的控制器,你需要确保在两个项目中都有HomeController。我的意思是任何 class 的名称在两个项目中都应该是唯一的。
不然你会遇到和我主页一样的问题
测试代码:
public List<PackageReference> GetPackageList5(string projectname)
{
List<PackageReference> list = new List<PackageReference>();
PackageReference p = null;
XDocument doc = XDocument.Load(_webHostEnvironment.ContentRootPath+ "/"+ projectname + ".csproj");
var packageReferences = doc.XPathSelectElements("//PackageReference")
.Select(pr => new PackageReference
{
Include = pr.Attribute("Include").Value,
Version = pr.Attribute("Version").Value
});
Console.WriteLine($"Project file contains {packageReferences.Count()} package references:");
foreach (var packageReference in packageReferences)
{
p = new PackageReference();
p.Version= packageReference.Version;
p.Include= packageReference.Include;
list.Add(packageReference);
//Console.WriteLine($"{packageReference.Include}, version {packageReference.Version}");
}
return list;
}
我的测试步骤:
创建两个项目,
Net5MVC
,Net6MVC
添加项目引用。
我的 .net6 项目引用了一个 .net5 项目。所以在我的 HomeController (.net) 中,我在下面添加:
using Net5MVC.ForCore6; using Net5MVC.Models;
建议
我们在.net6项目中引用.net5项目时,可以构建成功,但是部署时,总是失败。原因是某些文件是
multiple publish output files with the same relative path
.Found multiple publish output files with the same relative path: D:\..\Net6\Net6\Net5MVC\appsettings.Development.json, D:\..\Net6\Net6\Net6MVC\appsettings.Development.json, D:\..\Net6\Net6\Net5MVC\appsettings.json, D:\..\Net6\Net6\Net6MVC\appsettings.json.
并且通常会将class库添加到当前项目,而不是添加web项目。
我们知道可以在 .csproj 文件中找到包信息,因此我们需要将 .csproj 文件复制并粘贴到发布文件夹。
我还是推荐使用上面的GetPackageList5方法作为你项目的接口,请求使用HttpClient