本文整理汇总了C#中Expander.ExpandIntoStringListLeaveEscaped方法的典型用法代码示例。如果您正苦于以下问题:C# Expander.ExpandIntoStringListLeaveEscaped方法的具体用法?C# Expander.ExpandIntoStringListLeaveEscaped怎么用?C# Expander.ExpandIntoStringListLeaveEscaped使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Expander
的用法示例。
在下文中一共展示了Expander.ExpandIntoStringListLeaveEscaped方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ExpandAllIntoStringListLeaveEscapedComplex
public void ExpandAllIntoStringListLeaveEscapedComplex()
{
ReadOnlyLookup lookup;
StringMetadataTable itemMetadata;
CreateComplexPropertiesItemsMetadata(out lookup, out itemMetadata);
Expander<ProjectPropertyInstance, ProjectItemInstance> expander = new Expander<ProjectPropertyInstance, ProjectItemInstance>(lookup, lookup, itemMetadata);
string value = "@(Resource->'%(Filename)') ; @(Content) ; @(NonExistent) ; $(NonExistent) ; %(NonExistent) ; " +
"$(OutputPath) ; $(TargetPath) ; %(Language)_%(Culture)";
IList<string> expanded = expander.ExpandIntoStringListLeaveEscaped(value, ExpanderOptions.ExpandAll, MockElementLocation.Instance);
Assert.Equal(9, expanded.Count);
Assert.Equal(@"string$(p)", expanded[0]);
Assert.Equal(@"dialogs%253b", expanded[1]);
Assert.Equal(@"splash.bmp", expanded[2]);
Assert.Equal(@"\jk", expanded[3]);
Assert.Equal(@"l\mno%253bpqr\stu", expanded[4]);
Assert.Equal(@"subdir1\", expanded[5]);
Assert.Equal(@"subdir2\", expanded[6]);
Assert.Equal(@"english_abc%253bdef", expanded[7]);
Assert.Equal(@"ghi", expanded[8]);
}
示例2: foreach
/// <summary>
/// Returns a list of all items in the provided item group whose itemspecs match the specification, after it is split and any wildcards are expanded.
/// If no items match, returns null.
/// </summary>
/// <param name="items">The items to match</param>
/// <param name="specification">The specification to match against the items.</param>
/// <param name="specificationLocation">The specification to match against the provided items</param>
/// <param name="expander">The expander to use</param>
/// <returns>A list of matching items</returns>
private List<ProjectItemInstance> FindItemsMatchingSpecification
(
ICollection<ProjectItemInstance> items,
string specification,
ElementLocation specificationLocation,
Expander<ProjectPropertyInstance, ProjectItemInstance> expander
)
{
if (items.Count == 0 || specification.Length == 0)
{
return null;
}
// This is a hashtable whose key is the filename for the individual items
// in the Exclude list, after wildcard expansion.
HashSet<string> specificationsToFind = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
// Split by semicolons
IList<string> specificationPieces = expander.ExpandIntoStringListLeaveEscaped(specification, ExpanderOptions.ExpandAll, specificationLocation);
foreach (string piece in specificationPieces)
{
// Take each individual path or file expression, and expand any
// wildcards. Then loop through each file returned, and add it
// to our hashtable.
// Don't unescape wildcards just yet - if there were any escaped, the caller wants to treat them
// as literals. Everything else is safe to unescape at this point, since we're only matching
// against the file system.
string[] fileList = EngineFileUtilities.GetFileListEscaped(Project.Directory, piece);
foreach (string file in fileList)
{
// Now unescape everything, because this is the end of the road for this filename.
// We're just going to compare it to the unescaped include path to filter out the
// file excludes.
specificationsToFind.Add(EscapingUtilities.UnescapeAll(file));
}
}
if (specificationsToFind.Count == 0)
{
return null;
}
// Now loop through our list and filter out any that match a
// filename in the remove list.
List<ProjectItemInstance> itemsRemoved = new List<ProjectItemInstance>();
foreach (ProjectItemInstance item in items)
{
// Even if the case for the excluded files is different, they
// will still get excluded, as expected. However, if the excluded path
// references the same file in a different way, such as by relative
// path instead of absolute path, we will not realize that they refer
// to the same file, and thus we will not exclude it.
if (specificationsToFind.Contains(item.EvaluatedInclude))
{
itemsRemoved.Add(item);
}
}
return itemsRemoved;
}