Visual Studio 如何在运行时从不同项目文件夹的输出目录访问文件

e7arh2l6  于 2022-12-04  发布在  其他
关注(0)|答案(4)|浏览(169)

我们在Visual Studio中的一个解决方案下有一组测试项目。我想读取一个Json文件,该文件在运行时从不同的项目文件夹复制到输出目录。这是一个测试项目。我可以获取当前项目目录。但不确定如何获取其他程序集的目录。
解决方案如下所示***Project 1-〉Sample.json(此文件设置为复制到输出目录)Project 2***
在Project 2中运行测试时,我希望从输出目录访问Project 1中的文件。
我曾经用上面提到的代码访问同一个项目文件夹中的文件。但不知道如何获得不同的项目文件。现在用替换我能够实现它。但肯定这不是正确的方式

var filePath = Path.Combine("Sample.json");
 var fullPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), filePath).Replace("Project1", "Project2");

不确定如何从其他项目获取。我确定我不能使用***GetExecutingAssembly()***,但有什么替代方法吗?不知何故,我可以使用上述替换程序集名称的肮脏方法访问它。

mitkmikd

mitkmikd1#

若要取得另一个组件的位置,您可以使用该组件的型别来取得正确的Assembly执行严修,进而取得它的位置:

typeof(FromOtherAssembly).Assembly.Location
h5qlskok

h5qlskok2#

首先,我建议您可以在解决方案中找到dll路径。
其次,可以从路径中过滤json文件。
接下来是我的工作代码。
请先安装Microsoft.Build和Microsoft.Build.Framework nugetpackages。

string path= string.Empty;
        var solutionFile =SolutionFile.Parse(@"D:\test.sln");// Your solution place.
        var projectsInSolution = solutionFile.ProjectsInOrder;
        foreach (var project in projectsInSolution)
        {
           if(project.ProjectName=="TestDLL")     //your  dll name
            {
                path = project.AbsolutePath;
                DirectoryInfo di = new DirectoryInfo(string.Format(@"{0}..\..\", path));
                path = di.FullName;
                foreach (var item in Directory.GetFiles(path,"*.json")) // filter the josn file in the correct path
                {
                    if(item.StartsWith("Sample"))
                    {
                        Console.WriteLine(item);// you will get the correct json file path
                    }
                }
            }

        }
rhfm7lfc

rhfm7lfc3#

您可以使用下面的代码以更好的方式完成此操作

//solutionpath will take you to the root directory which has the .sln file
      string solutionpath = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName);
      string secondprojectname = @"SecondProjectName\bin";
      string finalPath = Path.Combine(solutionpath, secondprojectname);
ni65a41a

ni65a41a4#

您可以在MSBuild中使用CopyToOutputDirectory

相关问题