Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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语言构建不合适的版本# 我刚刚完成了一个使用现有的属性表,为一个看起来是针对VisualC++产品的特性的现有C++代码的非本地构建系统。“建筑不合适”需要更改许多项目设置,继承的属性页允许我只需将属性页附加到项目即可更改所有必要的设置。我正在将我们的团队从C++/MFC for UI迁移到C#和WPF,但我需要提供同样的异地构建功能,希望能提供同样的便利。我似乎找不到在C#项目中实现这一点的方法-我首先查看了是否可以引用MsBuild目标文件,但找不到实现这一点的方法。我知道我可以使用MsBuild来完成整个任务,但这似乎比必要的复杂得多。例如,有没有一种方法可以为目录定义宏并在输出路径中使用它_C#_Msbuild_Build Process - Fatal编程技术网

使用C语言构建不合适的版本# 我刚刚完成了一个使用现有的属性表,为一个看起来是针对VisualC++产品的特性的现有C++代码的非本地构建系统。“建筑不合适”需要更改许多项目设置,继承的属性页允许我只需将属性页附加到项目即可更改所有必要的设置。我正在将我们的团队从C++/MFC for UI迁移到C#和WPF,但我需要提供同样的异地构建功能,希望能提供同样的便利。我似乎找不到在C#项目中实现这一点的方法-我首先查看了是否可以引用MsBuild目标文件,但找不到实现这一点的方法。我知道我可以使用MsBuild来完成整个任务,但这似乎比必要的复杂得多。例如,有没有一种方法可以为目录定义宏并在输出路径中使用它

使用C语言构建不合适的版本# 我刚刚完成了一个使用现有的属性表,为一个看起来是针对VisualC++产品的特性的现有C++代码的非本地构建系统。“建筑不合适”需要更改许多项目设置,继承的属性页允许我只需将属性页附加到项目即可更改所有必要的设置。我正在将我们的团队从C++/MFC for UI迁移到C#和WPF,但我需要提供同样的异地构建功能,希望能提供同样的便利。我似乎找不到在C#项目中实现这一点的方法-我首先查看了是否可以引用MsBuild目标文件,但找不到实现这一点的方法。我知道我可以使用MsBuild来完成整个任务,但这似乎比必要的复杂得多。例如,有没有一种方法可以为目录定义宏并在输出路径中使用它,c#,msbuild,build-process,C#,Msbuild,Build Process,有没有办法为目录定义宏并在输出路径中使用它 您看过项目的预构建和后构建事件了吗?实际上,预构建和后构建事件似乎只是添加批处理文件类型命令的地方。不幸的是,这无助于我为我们的项目设置标准构建目录。让这些事件创建批处理文件似乎是20世纪80年代对于像国际海事组织C#这样的现代语言的一种非常好的方法 在进一步挖掘和试验之后,我发现您可以在.csproj文件中添加一个指令。当您执行此操作时,IDE会弹出一个警告对话框,指出您的项目中存在不安全的入口点,但是您可以忽略它,显然,您可以通过编辑注册表项使其完

有没有办法为目录定义宏并在输出路径中使用它


您看过项目的预构建和后构建事件了吗?

实际上,预构建和后构建事件似乎只是添加批处理文件类型命令的地方。不幸的是,这无助于我为我们的项目设置标准构建目录。让这些事件创建批处理文件似乎是20世纪80年代对于像国际海事组织C#这样的现代语言的一种非常好的方法

在进一步挖掘和试验之后,我发现您可以在.csproj文件中添加一个指令。当您执行此操作时,IDE会弹出一个警告对话框,指出您的项目中存在不安全的入口点,但是您可以忽略它,显然,您可以通过编辑注册表项使其完全不显示。因此,这将为我提供一种将包含所需目录路径的变量放入.csproj文件的方法

现在让输出路径引用它-不幸的是,当您将“$(MySpecialPath)/Debug”这样的字符串添加到输出路径字段并保存项目时,$和()字符被转换为十六进制,文件get被放在名为“$(MySpecialPath)”的目录下的调试目录中。啊。但是,如果在文本编辑器中编辑.csproj文件,则可以正确设置该文件,并且只要标记出现在包含输出路径的文件之前,该文件就可以正常工作


因此,我认为我的解决方案将是在标准位置创建一个标准的OurTeam.targets MsBuild文件,添加一个用于更改注册表的安装程序,使其不会标记警告,然后创建用于创建此文件的自定义项目模板,并将输出路径设置为使用在OurTeam.targets文件中定义的属性。遗憾的是,这比C++中的属性表继承机制更为有效,而且更不雅观。

< p>我不太清楚什么是“不合适”的构建系统,但是如果您只需要将编译过的文件(或其他资源)复制到其他目录,就可以通过绑定到MSBudio构建目标来完成。 在我们的项目中,我们将编译后的DLL移动到lib文件夹中,并在构建完成后将文件放入适当的位置。为此,我们创建了一个自定义build.target文件,该文件创建了
目标
属性
、以及
项目组
,然后用于填充外部输出文件夹

我们的自定义目标文件看起来有点像这样:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <ProjectName>TheProject</ProjectName>
        <ProjectDepthPath>..\..\</ProjectDepthPath>
        <ProjectsLibFolder>..\..\lib\</ProjectsLibFolder>

        <LibFolder>$(ProjectsLibFolder)$(ProjectName)\$(Configuration)\</LibFolder>
    </PropertyGroup>

    <Target Name="DeleteLibFiles">
        <Delete Files="@(LibFiles-> '$(ProjectDepthPath)$(LibFolder)%(filename)%(extension)')" TreatErrorsAsWarnings="true" />
    </Target>
    <Target Name="CopyLibFiles">
        <Copy SourceFiles="@(LibFiles)" DestinationFolder="$(ProjectDepthPath)$(LibFolder)" SkipUnchangedFiles="True" />
    </Target>

    <ItemGroup>
        <LibFiles Include=" ">
            <Visible>false</Visible>
        </LibFiles>
    </ItemGroup>
</Project>

项目
..\..\
..\..\lib\
$(项目文件夹)$(项目名称)\$(配置)\
假的
然后,Visual Studio中的.csproj文件与此自定义目标文件集成:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" ... >
    ...
    <Import Project="..\..\..\..\build\OurBuildTargets.targets" />
      <ItemGroup>
        <LibFiles Include="$(OutputPath)$(AssemblyName).dll">
          <Visible>false</Visible>
        </LibFiles>
      </ItemGroup>
    <Target Name="BeforeClean" DependsOnTargets="DeleteLibFiles" />
    <Target Name="AfterBuild" DependsOnTargets="CopyLibFiles" />
</Project>

...
假的
简而言之,此构建脚本首先告诉MSBuild加载自定义构建脚本,然后将编译后的文件添加到
LibFiles
项组,最后将自定义构建目标
DeleteLibFiles
CopyLibFiles
绑定到构建过程中。我们为解决方案中的每个项目设置了此选项,因此只有更新的文件才会被删除/复制,并且每个项目负责自己的文件(DLL、图像等)

我希望这有帮助。如果我误解了你们所说的“不合适的构建系统”的意思,我向你们道歉,这对你们来说是完全无用的