Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取csproj文件中列出的引用的路径_C#_.net_Xml_Linq_Msbuild - Fatal编程技术网

C# 获取csproj文件中列出的引用的路径

C# 获取csproj文件中列出的引用的路径,c#,.net,xml,linq,msbuild,C#,.net,Xml,Linq,Msbuild,我知道csproj文件的路径(在100多个其他项目文件中)。 我想检查“bin”中存在哪些引用,以便将这些引用的“copy local”值设置为false。为此,我需要获得引用的路径(或者有更好的方法吗??)。 如何获取csproj文件中列出的引用的路径 提前谢谢 尝试以下操作: var project = ProjectRootElement.Open(fileName); var referenceElements = project.Items .Where(x => x.I

我知道csproj文件的路径(在100多个其他项目文件中)。 我想检查“bin”中存在哪些引用,以便将这些引用的“copy local”值设置为false。为此,我需要获得引用的路径(或者有更好的方法吗??)。 如何获取csproj文件中列出的引用的路径

提前谢谢

尝试以下操作:

var project = ProjectRootElement.Open(fileName);
var referenceElements = project.Items
    .Where(x => x.ItemType.Equals("Reference"))
    .Where(x => x.HasMetadata && x.Metadata.Any(m => m.Name.Equals("HintPath") && CheckLocation(m.Value)));

    foreach (var projectItemElement in referenceElements) 
    {
        var copyLocalElement = projectItemElement.Metadata.FirstOrDefault(x => x.Name.Equals("CopyLocal"));
        if (copyLocalElement != null) 
        {
            copyLocalElement.Value = "false";
            continue;
        }
        projectItemElement.AddMetadata("CopyLocal", "false");
    }
根据需要实现CheckLocation方法。我没有完全测试这一点,但我希望它显示出正确的方式。

尝试以下内容:

var project = ProjectRootElement.Open(fileName);
var referenceElements = project.Items
    .Where(x => x.ItemType.Equals("Reference"))
    .Where(x => x.HasMetadata && x.Metadata.Any(m => m.Name.Equals("HintPath") && CheckLocation(m.Value)));

    foreach (var projectItemElement in referenceElements) 
    {
        var copyLocalElement = projectItemElement.Metadata.FirstOrDefault(x => x.Name.Equals("CopyLocal"));
        if (copyLocalElement != null) 
        {
            copyLocalElement.Value = "false";
            continue;
        }
        projectItemElement.AddMetadata("CopyLocal", "false");
    }

根据需要实现CheckLocation方法。我并没有完全测试这一点,但我希望它显示出正确的方式。

非常不清楚。你希望如何生存建造+清洁?“复制本地”属性与设置警告级别有什么关系?我正在构建一个工具,该工具将检查程序集引用是否在“bin”内,并相应地设置/重置引用的复制本地值。至于警告级别代码段,我希望以类似的方式检索引用路径值(如果可能的话,使用LINQ)……此外,我还想知道是否有方法访问处于默认状态的引用的copy local属性。也就是说,除非在VS中手动更改默认副本本地值(在xml中标记为),否则无法查看/访问该值。你希望如何生存建造+清洁?“复制本地”属性与设置警告级别有什么关系?我正在构建一个工具,该工具将检查程序集引用是否在“bin”内,并相应地设置/重置引用的复制本地值。至于警告级别代码段,我希望以类似的方式检索引用路径值(如果可能的话,使用LINQ)……此外,我还想知道是否有方法访问处于默认状态的引用的copy local属性。也就是说,除非在VS中手动更改默认副本本地值(在xml中标记),否则无法查看/访问该值。感谢@pavel提供LINQ表达式!!但是我的问题更多的是关于CheckLocation()函数的实现……我不确定是否可以从csproj文件中获取引用的路径。CheckLocation函数应该做什么?在我的示例中,它是以引用路径作为参数调用的
CheckLocation(m.Value)
-
m.Value
在我的示例中是来自csproj的参考HintPath。感谢@pavel提供LINQ表达式!!但是我的问题更多的是关于CheckLocation()函数的实现……我不确定是否可以从csproj文件中获取引用的路径。CheckLocation函数应该做什么?在我的示例中,它是以引用路径作为参数调用的<代码>检查位置(m.Value)-
m.Value
在我的示例中是csproj的参考HintPath。