示例#1
0
        public static string GetRelativePath(string basePath, string subPath)
        {
            VerifyStringArgument(basePath, "basePath");
            VerifyStringArgument(subPath, "subPath");

            if (!Path.IsPathRooted(basePath))
            {
                throw new ArgumentException("The 'basePath' is not rooted.");
            }

            if (!Path.IsPathRooted(subPath))
            {
                return(subPath);
            }

            if (!String.Equals(Path.GetPathRoot(basePath), Path.GetPathRoot(subPath), StringComparison.OrdinalIgnoreCase))
            {
                // both paths have different roots so we can't make them relative
                return(subPath);
            }

            // Url.MakeRelative method requires the base path to be ended with a '\' if it is a folder,
            // otherwise it considers it as a file so we need to make sure that the folder path is right
            basePath = WixHelperMethods.EnsureTrailingDirectoryChar(basePath.Trim());

            Url url = new Url(basePath);

            return(url.MakeRelative(new Url(subPath)));
        }
示例#2
0
        /// <summary>
        /// When building with only a wixproj in the solution, the SolutionX variables are not
        /// defined, so we have to define them here.
        /// </summary>
        /// <param name="project">The project where the properties are defined.</param>
        internal static void DefineSolutionProperties(WixProjectNode project)
        {
            IVsSolution solution = WixHelperMethods.GetService <IVsSolution, SVsSolution>(project.Site);
            object      solutionPathObj;

            ErrorHandler.ThrowOnFailure(solution.GetProperty((int)__VSPROPID.VSPROPID_SolutionFileName, out solutionPathObj));
            string             solutionPath = (string)solutionPathObj;
            WixPackageSettings settings     = project.WixPackage.Settings;
            string             devEnvDir    = WixHelperMethods.EnsureTrailingDirectoryChar(Path.GetDirectoryName(settings.DevEnvPath));

            string[][] properties = new string[][]
            {
                new string[] { WixProjectFileConstants.DevEnvDir, devEnvDir },
                new string[] { WixProjectFileConstants.SolutionPath, solutionPath },
                new string[] { WixProjectFileConstants.SolutionDir, WixHelperMethods.EnsureTrailingDirectoryChar(Path.GetDirectoryName(solutionPath)) },
                new string[] { WixProjectFileConstants.SolutionExt, Path.GetExtension(solutionPath) },
                new string[] { WixProjectFileConstants.SolutionFileName, Path.GetFileName(solutionPath) },
                new string[] { WixProjectFileConstants.SolutionName, Path.GetFileNameWithoutExtension(solutionPath) },
            };

            foreach (string[] property in properties)
            {
                string propertyName  = property[0];
                string propertyValue = property[1];

                project.BuildProject.SetGlobalProperty(propertyName, propertyValue);
            }
        }
示例#3
0
        /// <summary>
        /// Initialize common project properties with default value if they are empty.
        /// </summary>
        /// <remarks>
        /// The following common project properties are defaulted to projectName (if empty): ToolPath.
        /// If the project filename is not set then no properties are set.
        /// </remarks>
        protected override void InitializeProjectProperties()
        {
            // make sure the project file name has been set
            if (String.IsNullOrEmpty(this.FileName) || String.IsNullOrEmpty(Path.GetFileNameWithoutExtension(this.FileName)))
            {
                return;
            }

            // initialize the WixToolPath property from the value in the registry
            string toolsDirectory        = this.package.Settings.ToolsDirectory;
            string programFilesDirectory = WixHelperMethods.EnsureTrailingDirectoryChar(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles));

            // if the path in the registry starts with the same path as program files, then just put in $(ProgramFiles) to make it more portable
            if (toolsDirectory.StartsWith(programFilesDirectory, StringComparison.OrdinalIgnoreCase))
            {
                toolsDirectory = "$(ProgramFiles)\\" + toolsDirectory.Substring(programFilesDirectory.Length);
            }

            this.SetProjectProperty(WixProjectFileConstants.WixToolPath, toolsDirectory);
        }