问题
I am creating a custom build tfs activity to be used inside the azure continuous integration.
I have used the code from this blog: http://www.ewaldhofman.nl/post/2010/06/01/Customize-Team-Build-2010-e28093-Part-10-Include-Version-Number-in-the-Build-Number.aspx
As you can see AssemblyInfoFileMask in the code below its public. Also please check the screenshot to see what I meant, BuildDetail its on the same class and doesnt show me the error in the blue icon.
I will paste it here the code as well:
[BuildActivity(HostEnvironmentOption.Controller)]
public sealed class GetAssemblyVersion : CodeActivity<string>
{
[RequiredArgument]
public InArgument<string> AssemblyInfoFileMask { get; set; }
[RequiredArgument]
public InArgument<IBuildDetail> BuildDetail { get; set; }
protected override string Execute(CodeActivityContext context)
{
// Obtain the runtime value of the input arguments
string assemblyInfoFileMask = context.GetValue(this.AssemblyInfoFileMask);
IBuildDetail buildDetail = context.GetValue(this.BuildDetail);
var workspace = buildDetail.BuildDefinition.Workspace;
var vc = buildDetail.BuildServer.TeamProjectCollection.GetService<VersionControlServer>();
string attribute = "AssemblyFileVersion";
// Define the regular expression to find (which is for example 'AssemblyFileVersion("1.0.0.0")' )
Regex regex = new Regex(attribute + @"\(""\d+\.\d+\.\d+\.\d+""\)");
// For every workspace folder (mapping)
foreach (var folder in workspace.Mappings)
{
// Get all files (recursively) that apply to the file mask
ItemSet itemSet = vc.GetItems(folder.ServerItem + "//" + assemblyInfoFileMask, RecursionType.Full);
foreach (Item item in itemSet.Items)
{
context.TrackBuildMessage(string.Format("Download {0}", item.ServerItem));
// Download the file
string localFile = Path.GetTempFileName();
item.DownloadFile(localFile);
// Read the text from the AssemblyInfo file
string text = File.ReadAllText(localFile);
// Search for the first occurrence of the version attribute
Match match = regex.Match(text);
// When found
if (match.Success)
{
// Retrieve the version number
string versionNumber = match.Value.Substring(attribute.Length + 2, match.Value.Length - attribute.Length - 4);
Version version = new Version(versionNumber);
// Increase the build number -> this will be the new version number for the build
Version newVersion = new Version(version.Major, version.Minor, version.Build + 1, version.Revision);
context.TrackBuildMessage(string.Format("Version found {0}", newVersion));
return newVersion.ToString();
}
}
}
return "No version found";
}
}
}
回答1:
The Blue Exclamation mark means you are trying to pass the value of a Variable
/Argument
called AssemblyInfoFileMask
to a Property
on your Activity called AssemblyInfoFileMask
.
You need to declare an Argument or Variable yourself to pass to your activity.
If you want to be able to set the AssemblyInfoFileMask
in your build definitions, then you need to declare it as an Argument.
See this updated version of your image you will see where you declare it:
Once you have declared an Argument, you need to find the MetaData
Collection Argument and add it there too. See this post for more details.
If you don't need to set it in a build definition (it's going to be constant for all builds), then just add a Variable
and set it's value to the Pattern you require.
来源:https://stackoverflow.com/questions/16020586/assemblyinfofilemask-is-not-declared-it-may-be-inaccessible-due-to-its-protec